Memuat file konfigurasi khusus

119

Saya tahu saya dapat membuka file konfigurasi yang terkait dengan perakitan dengan ConfigurationManager.OpenExe(exePath)metode statis tetapi saya hanya ingin membuka konfigurasi yang tidak terkait dengan perakitan. Hanya file konfigurasi .NET standar.

Adam
sumber

Jawaban:

245

artikel yang diposting oleh Ricky sangat bagus, tapi sayangnya mereka tidak menjawab pertanyaan Anda.

Untuk mengatasi masalah Anda, Anda harus mencoba potongan kode ini:

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

Jika perlu mengakses nilai dalam konfigurasi, Anda dapat menggunakan operator indeks:

config.AppSettings.Settings["test"].Value;
Oliver
sumber
1
@Oliver Dengan whateverYouLikeExtension, maksud Anda bahwa Anda harus memiliki sesuatu setelahnya config.?
Svish
4
@Oliver Berkeliling untuk mencoba sekarang, dan tampaknya berfungsi dengan baik tanpa :)
Svish
1
Saya melakukan ini, tetapi ketika saya mengakses ConfigurationManager.ConnectionStrings saya masih mendapatkan data lama. Apa yang saya lewatkan?
MAW74656
1
@ MAW74656: Anda tidak perlu mengakses ConfigurationManager.ConnectionStrings. Sebagai gantinya Anda harus membaca nilai dari configobjek yang dikembalikan dari pernyataan terakhir di atas.
Oliver
3
Untuk orang lain yang mencari cara mendapatkan appSettings setelah ini selesai: var foo = config.AppSettings.Settings ["test"]. Value;
Roro
8

File konfigurasi hanyalah file XML, Anda dapat membukanya dengan:

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;
    }
}

dan kemudian mengambil nilai dengan:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Otávio Décio
sumber
Kode tidak dapat dijangkau terdeteksi setelah throw new Exception("No configuration file found.", e);.
Oybek
Saya akan menghapus pengembalian nol, itu tidak akan benar-benar tercapai.
Otávio Décio
7
mengapa harus menggunakan XML saat Anda memiliki kelas hebat dari pustaka .Net. Saya tidak akan menyarankan menggunakan ini, buruk dalam desain. Apa selanjutnya? menerapkan kelas string yang berbeda ... pertimbangkan ini.
Yuki
@ OtávioDécio Dapatkah saya menambahkan system.diagnostics untuk mengaktifkan pelacakan di file .config kustom?
FaizanHussainRabbani
@FaizanRabbani tidak yakin tentang pelacakan khusus, tetapi menurut msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx, Anda seharusnya dapat menambahkan diagnostik pada file konfigurasi.
Otávio Décio