กำลังโหลดไฟล์กำหนดค่าแบบกำหนดเอง


119

ฉันรู้ว่าฉันสามารถเปิดไฟล์กำหนดค่าที่เกี่ยวข้องกับแอสเซมบลีด้วยConfigurationManager.OpenExe(exePath)วิธีการแบบคงที่แต่ฉันแค่ต้องการเปิด config ที่ไม่เกี่ยวข้องกับแอสเซมบลี เพียงแค่ไฟล์กำหนดค่า. NET มาตรฐาน

คำตอบ:


245

บทความที่ Ricky โพสต์นั้นดีมาก แต่น่าเสียดายที่พวกเขาไม่ตอบคำถามของคุณ

ในการแก้ปัญหาของคุณคุณควรลองใช้โค้ดนี้:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

หากต้องการเข้าถึงค่าภายในการกำหนดค่าคุณสามารถใช้ตัวดำเนินการดัชนี:

config.AppSettings.Settings["test"].Value;

1
@Oliver By whateverYouLikeExtensionหมายความว่าต้องมีอะไรตามมาconfig.ใช่ไหม
Svish

4
@Oliver ลองไปแล้วและดูเหมือนว่าจะทำงานได้ดีถ้าไม่มี :)
Svish

1
ฉันทำสิ่งนี้แล้ว แต่เมื่อฉันเข้าถึง ConfigurationManager.ConnectionStrings ฉันยังคงได้รับข้อมูลเก่า ฉันขาดอะไรไป?
MAW74656

1
@ MAW74656: ConfigurationManager.ConnectionStringsคุณไม่จำเป็นต้องเข้าถึง แต่คุณต้องอ่านค่าจากconfigวัตถุที่ส่งคืนจากคำสั่งสุดท้ายข้างต้น
Oliver

3
สำหรับใครที่กำลังค้นหาวิธีรับ appSettings หลังจากนี้เสร็จสิ้น: var foo = config.AppSettings.Settings ["test"] ค่า;
Roro

8

ไฟล์กำหนดค่าเป็นเพียงไฟล์ XML คุณสามารถเปิดได้โดย:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

และดึงค่าในภายหลังโดย:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");

throw new Exception("No configuration file found.", e);รหัสเข้าไม่ถึงตรวจพบหลังจากที่
Oybek

ฉันจะลบค่าว่างที่ส่งคืนออกไปมันจะไม่ถึง
OtávioDécio

7
ทำไมต้องใช้ XML เมื่อคุณมีคลาสที่ยอดเยี่ยมจากไลบรารี. Net ฉันไม่แนะนำให้ใช้สิ่งนี้เนื่องจากการออกแบบไม่ดี อะไรต่อไป? ใช้คลาสสตริงอื่น ... พิจารณาสิ่งนี้
Yuki

@ OtávioDécioฉันสามารถเพิ่ม system.diagnostics เพื่อเปิดใช้งานการติดตามในไฟล์. config ที่กำหนดเองได้หรือไม่
FaizanHussainRabbani

@FaizanRabbani ไม่แน่ใจเกี่ยวกับการติดตามแบบกำหนดเอง แต่ตามmsdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspxคุณควรจะสามารถเพิ่มการวินิจฉัยในไฟล์กำหนดค่าได้
OtávioDécio

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.