Jawaban Ishmaeel umumnya berfungsi, namun saya menemukan satu masalah, yaitu penggunaan OpenMappedMachineConfiguration
tampaknya kehilangan grup bagian yang Anda warisi dari machine.config. Ini berarti Anda dapat mengakses bagian kustom Anda sendiri (yang semuanya diinginkan OP), tetapi bukan bagian sistem normal. Misalnya, kode ini tidak akan berfungsi:
ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; // returns null
Pada dasarnya, jika Anda meletakkan jam tangan di configuration.SectionGroups
, Anda akan melihat bahwa system.net tidak terdaftar sebagai SectionGroup, jadi tidak bisa diakses melalui saluran normal.
Ada dua cara yang saya temukan untuk mengatasi ini. Yang pertama, yang tidak saya suka, adalah mengimplementasikan ulang grup bagian sistem dengan menyalinnya dari machine.config ke web.config Anda sendiri misalnya
<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
</sectionGroup>
Saya tidak yakin aplikasi web itu sendiri akan berjalan dengan benar setelah itu, tetapi Anda dapat mengakses sectionGroups dengan benar.
Solusi kedua adalah membuka web.config Anda sebagai konfigurasi EXE, yang mungkin lebih dekat dengan fungsi yang dimaksudkan:
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = strConfigPath };
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; // returns valid object!
Saya berani mengatakan tidak ada jawaban yang diberikan di sini, baik milik saya atau Ishmaeel, yang cukup menggunakan fungsi ini seperti yang dimaksudkan oleh desainer NET. Tapi, ini sepertinya berhasil untuk saya.