Ishmaeel de répondre, en général, ne se de travail, cependant, j'ai trouvé un problème, qui est que l'utilisation d' OpenMappedMachineConfiguration
semble perdre votre hérité de la section des groupes de la machine.config. Cela signifie que vous pouvez accéder à vos propres articles (qui est de toutes les OP voulu), mais pas le système normal sections. Par exemple, ce code ne fonctionnera pas:
ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; // returns null
En gros, si vous mettez une veille sur l' configuration.SectionGroups
, vous verrez que system.net n'est pas inscrit comme SectionGroup, de sorte qu'il est à peu près inaccessible via les canaux habituels.
Il ya deux façons que j'ai trouvé pour contourner ce problème. La première, que je n'aime pas, est de re-mettre en œuvre le système de la section des groupes en les copiant à partir de la machine.config dans votre propre site web.config par exemple
<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>
Je ne suis pas sûr de l'application web elle-même va s'exécuter correctement après cela, mais vous pouvez accéder à la sectionGroups correctement.
La deuxième solution c'est qu'au lieu d'ouvrir votre site web.config comme un fichier EXE de configuration, ce qui est probablement plus proche de sa fonction, de toute façon:
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!
Je crois pouvoir dire aucune des réponses fournies, ni de la mine ou Ishmaeel, sont tout à fait à l'aide de ces fonctions de la façon la .NET concepteurs prévu. Mais, cela semble fonctionner pour moi.