web-dev-qa-db-fra.com

Plusieurs fichiers AppSettings, est-ce possible?

Je veux créer 3 fichiers de configuration AppSettings:

  • Database.config
  • Messages.config
  • Global.config

Et après avoir ajouté dans mon App.config:

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

Mais lorsque j'essaie d'accéder à une clé qui se trouve dans l'un des trois fichiers avec le ConfigurationManager, j'ai eu l'erreur suivante:

Le système de configuration n'a pas pu s'initialiser. Les sections ne doivent apparaître qu'une seule fois par fichier de configuration.

Je ne peux pas avoir plus d'un fichier de configuration AppSettings?

42
Vinicius Ottoni

Vous ne pouvez pas avoir plus d'une application, car c'est le nom d'une section. Vous pouvez cependant ajouter une nouvelle section qui utilise le même type de définition de section que les paramètres d'application. Par exemple.,

<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>
49
aquinas

Code pour fichier séparé:

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>

database.config:

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

etc...

Accessible via un code comme celui-ci:

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