.NET类库项目中的多个App.Config文件

时间:2010-12-15 19:31:39

标签: c# .net visual-studio c#-4.0

我正在创建一个类库项目。 现在默认情况下我有一个App.Config文件,以便我将所有特定于环境的数据放在该Config文件中。

现在基于环境(无论开发/测试/生产),我计划在VS 2010中有三个App.Config文件,例如

App.Dev.Config

App.Test.Config

App.Prod.Config

想知道应用程序将如何知道要使用哪个配置文件。

任何实施此方案的人。任何代码样本/文章都会有所帮助。

由于

3 个答案:

答案 0 :(得分:16)

该应用程序将使用名为YourExcecutable.exe.config的配置文件,默认情况下是您的(可执行)项目中包含的文件App.config。 请注意,.NET仅为整个应用程序加载一个配置文件。无需编码即可使用多个配置文件(即每个库项目一个)。

  1. 选项:您可以使用postbuild事件和不同的解决方案配置将一个或另一个App.Config文件复制到输出文件夹

  2. 选项:您可以使用ConfigurationManager类按代码加载备用配置文件。

答案 1 :(得分:8)

现在有一个更好的解决方案:SlowCheetah - XML Transforms

答案 2 :(得分:5)

可以使用映射配置文件在运行时加载其他应用程序配置文件。您需要在项目中添加对System.Configuration.dll的引用。

将除默认值(App.config)之外的所有其他配置文件(例如App1.config,App2.config等)的Copy to Output Directory属性值设置为Copy if newer。这样,在项目构建完成后,它们将在项目输出目录(\ bin \ debug)中可用。此属性的默认值为Do not copy

enter image description here

以下是有关如何从非默认配置文件中读取配置数据的代码段:

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = "App1.config"; // app1.config should be present in root directory from where application exe is kicked off

 // Get the mapped configuration file
 var config = ConfigurationManager.OpenMappedExeConfiguration( 
        configFileMap, ConfigurationUserLevel.None);

 //get the relevant section from the config object
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");

//get key value pair
var keyValueConfigElement = section.Settings["appSettingsKey"];
var appSettingsValue = keyValueConfigElement.Value;

如果您有多个应用配置文件,那么您可以在默认App.config文件中保留一个设置,借此可以在运行时决定要加载哪个附加配置文件,例如App1.config

注意:请注意,ConfigurationManager.AppSettings["DeployEnv"]之类的代码仍将从默认的App.config文件中读取数据。此行为无法更改。无法禁止加载默认App.config文件。您必须使用上面显示的备用方法从非默认配置文件中读取数据