.Net配置 - 如何覆盖映射配置文件中的设置和自定义部分?

时间:2012-03-14 05:10:34

标签: c# .net configuration app-config

如果我在myprogram.exe.config文件中:

<configuration>
  <configSections>
    <section name="fooSection" type="MyNamespace.MySection, My.Assembly"/>
  </configSections>
  <appSettings>
    <add key="foo" value="bar"/>
  </appSettings>
  <fooSection>
    <bar>
      <add baz="foo bar baz"/>
    </bar>
  </fooSection>
</configuration>

我在overrides.config文件中:

<configuration>
  <configSections>
    <section name="fooSection" type="MyNamespace.MySection, My.Assembly"/>
  </configSections>
  <appSettings>
    <add key="foo" value="BAZ"/>
  </appSettings>
  <fooSection>
    <bar>
      <add baz2="foo foo"/>
    </bar>
  </fooSection>
</configuration>

有没有办法让这个读入核心(或加载)配置,就像你使用机器 - &gt;应用程序配置文件优先? (甚至是machine.config - &gt;机器根web.config - &gt;本地应用程序web.config)

在这个例子中,我希望config.AppSettings [“foo”]为“BAZ”,fooSection包含两个项目:“foo bar baz”和“foo foo”。

我无法找到方法,我猜它可能不受支持。我尝试了许多排列。

MySection section = ConfigurationManager.GetSection("foo") as MySection;

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.LocalUserConfigFilename = // have tried this;
fileMap.ExeConfigFilename = // have tried this
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
ConfigurationManager.RefreshSection("foo");

foo = ConfigurationManager.GetSection("foo") as MySection;
// will only have one item
foo = config.GetSection("foo") as MySection;
// will only have one item

1 个答案:

答案 0 :(得分:0)

你为什么要这样做?在我看来,你似乎正试图处理生产配置?如果是这种情况,那么我建议查看.config转换。实际上,Scott Hanselman写了good post on the subject

否则,我不相信这是可能的。特别是,配置转换具有灵活性。