如何在c#中配置配置文件的不同部分

时间:2012-03-06 11:41:58

标签: c# configuration-files

我想要做的是我的App.config文件我有一堆设置,我想做的事情将我的配置文件拆分成不同的文件。例如;我的app.config文件文件有与电子邮件有关的设置,所以我想把这些设置拿出来存放在email.config文件中然后在我的app.config文件中使用configSource属性从email.config添加这些设置文件并将其添加到应用程序设置节点。这可能吗?

如果是,请就如何实现上述结果提出建议。

非常感谢。

所以例如我有另一个名为app1.config的配置文件,并具有以下xml:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings >
    <add key="l" value="test"/>
  </appSettings>
</configuration>

然后从我的主app.config文件中引用app1.config文件,然后从代码中获取应用程序设置键的值:

 var x = ConfigurationManager.AppSettings["l"];

4 个答案:

答案 0 :(得分:6)

编辑以反映更改的问题和其他评论:

对于在配置文件的<appSettings>部分中定义的自定义设置,有一个file属性,可以包含覆盖appSettings参数的文件路径: http://www.codeproject.com/Articles/8818/Using-the-File-attribute-of-the-appSettings-elemen

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings file="settings.config">
 </appSettings>
</configuration>`

您确实也可以使用MSDN文档中指定的configSource属性:

http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx

  

ConfigSource属性表示为与SectionInformation对象关联的ConfigurationSection对象指定的configSource属性的值。

     

ConfigurationSection实现可以选择指定一个单独的文件,在该文件中定义该部分的配置设置。这在以多种方式有用:

     

使用包含文件可以为配置文件提供更加逻辑和模块化的结构。

     

文件访问安全性和权限可用于限制对配置设置部分的访问。

     

可以修改和重新加载在应用程序初始化期间未使用的包含文件中的设置,而无需重新启动应用程序。

     

以下示例显示如何在配置文件中使用此属性来指定在外部包含文件中定义pages部分:

     

<pages configSource="pages.config"/>

或者,如果要将来自同一部分的信息存储在单独的文件中,您始终可以恢复使用ConfigurationManager.Open ...配置功能并以编程方式读取设置: http://msdn.microsoft.com/en-us/library/ms134262.aspx

答案 1 :(得分:4)

您可以在自己的文件中使用smtp settings的内置配置部分:

<system.net>
    <mailSettings>
      <smtp deliveryMethod="network">
        <network
          host="localhost"
          port="25"
          defaultCredentials="true"
        />
      </smtp>
    </mailSettings>
</system.net>

您可以使用app.configconfigSource中引用此内容。

如果您愿意,可以单独将此限制为smtp部分:

<system.net>
    <mailSettings>
      <smtp configSource="smtp.config" />
    </mailSettings>
</system.net>

答案 2 :(得分:0)

您可以使用configSource属性执行此操作:

 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
 <connectionStrings configSource="cs.config" />
 </configuration>

答案 3 :(得分:0)

ConfigSource将整个部分映射到外部文件。一旦添加它,就不能再使用根配置文件中的部分了。你不能每个部分有多个映射。

如上所述,您可以使用要映射的部分创建自定义配置部分。然后轮流映射每个部分。

的web.config:

<myConfig>
    <mysection1 file="section1.config"/>
    <mysection2 file="section2.config"/>
</myConfig>

section1.config:

<mysection1>
    <add key="key1" value="val1"/>
</mysection1>