【问题标题】:Multiple AppSettings files, is it possible?多个 AppSettings 文件,可以吗?
【发布时间】:2012-07-06 06:10:48
【问题描述】:

我想创建 3 个 AppSettings 配置文件:

  • 数据库.config
  • Messages.config
  • Global.config

在添加我的 App.config 之后:

<appSettings file="Database.config" />
<appSettings file="Messages.config" />
<appSettings file="Global.config" />

但是,当我尝试使用ConfigurationManager 访问三个文件之一中的密钥时,出现以下错误:

配置系统初始化失败。每个配置文件中的部分只能出现一次。

我不能拥有多个 AppSettings 配置文件?

【问题讨论】:

  • 定义不同的配置部分,为什么要添加额外的文件? appconfig 文件是所有正在运行的项目根目录之一。
  • 对于最终用户来说最易读,会改变一些值。只有一个文件,我要一个大文件,我不要它。
  • 你也可以使用一些xml文件来做你的配置,但是200-300行代码的配置文件还不错;)

标签: c# .net configuration appsettings


【解决方案1】:

您不能拥有多个 appsettings,因为这是一个部分的名称。您可以添加一个新的部分,尽管它使用与 appsettings 相同类型的部分定义。例如,

<configuration>
    <configSections>
        <section name="DatabaseConfig" type="System.Configuration.NameValueFileSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </configSections>
    ....
    <DatabaseConfig>
       <add key="Whatever" value="stuff"/>
    </DatabaseConfig>
</configuration>

【讨论】:

  • 我可以在另一个文件中添加 吗?我的目标是将每个配置放在不同的文件中。
  • 是的。绝对地。工作方式与 appsettings 完全相同。
  • 用配置管理器访问?我怎样才能做到这一点? (因为我使用 appSettings:ConfigurationManager.AppSettings["MyKey"])
  • NameValueCollection 设置 = (NameValueCollection) ConfigurationManager.GetSection("DatabaseConfig");
【解决方案2】:

单独文件的代码:

Web.config:

<configSections>
    <section name="DatabaseConfig" type="System.Configuration.NameValueFileSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <section name="MessageConfig" type="System.Configuration.NameValueFileSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <section name="GlobalConfig" type="System.Configuration.NameValueFileSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

<DatabaseConfig configSource="database.config">
</DatabaseConfig>

<MessageConfig configSource="message.config">
</MessageConfig>

<GlobalConfig configSource="global.config">
</GlobalConfig>

数据库.config:

<DatabaseConfig>
  <add key="Name" value="ServerName" />
</DatabaseConfig>

等等……

可以通过如下代码访问:

var databaseConfiguration = (NameValueCollection)ConfigurationManager.GetSection("DatabaseConfig");
string name = databaseConfiguration["Name"];

【讨论】:

  • 这正是我需要的应用版本
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多