Ishmaeel'in cevabı genellikle işe yarıyor, ancak bir sorun buldum, bu da kullanımın, OpenMappedMachineConfiguration
miras alınan bölüm gruplarınızı machine.config'den kaybettiği gibi görünüyor. Bu, kendi özel bölümlerinize (istenen tüm OP) erişebileceğiniz, ancak normal sistem bölümlerine erişemeyeceğiniz anlamına gelir. Örneğin, bu kod çalışmayacaktır:
ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; // returns null
Temel olarak, bir izleme configuration.SectionGroups
yaparsanız, system.net'in bir Bölüm Grubu olarak kayıtlı olmadığını görürsünüz, bu nedenle normal kanallar aracılığıyla hemen hemen erişilemez.
Bu sorunu çözmek için bulduğum iki yol var. Birincisi, sevmediğim şey, sistem bölümü gruplarını machine.config'den kendi web.config'inize kopyalayarak yeniden uygulamaktır.
<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>
Web uygulamasının bundan sonra düzgün çalışacağından emin değilim, ancak bölüm gruplarına doğru bir şekilde erişebilirsiniz.
İkinci çözüm, bunun yerine web.config dosyanızı bir EXE yapılandırması olarak açmaktır; bu, muhtemelen zaten amaçlanan işlevine daha yakındır:
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!
Burada verilen cevapların hiçbirinin, ne benim ne de Ishmaeel'in, .NET tasarımcılarının amaçladığı gibi bu işlevleri tam olarak kullanmadığını söyleyebilirim. Ama bu benim için çalışıyor gibi görünüyor.