我正在创建一个类库项目。 现在默认情况下我有一个App.Config文件,以便我将所有特定于环境的数据放在该Config文件中。
现在基于环境(无论开发/测试/生产),我计划在VS 2010中有三个App.Config文件,例如
App.Dev.Config
App.Test.Config
App.Prod.Config
想知道应用程序将如何知道要使用哪个配置文件。
任何实施此方案的人。任何代码样本/文章都会有所帮助。
由于
答案 0 :(得分:16)
该应用程序将使用名为YourExcecutable.exe.config的配置文件,默认情况下是您的(可执行)项目中包含的文件App.config。 请注意,.NET仅为整个应用程序加载一个配置文件。无需编码即可使用多个配置文件(即每个库项目一个)。
选项:您可以使用postbuild事件和不同的解决方案配置将一个或另一个App.Config文件复制到输出文件夹
选项:您可以使用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
。
以下是有关如何从非默认配置文件中读取配置数据的代码段:
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
文件。您必须使用上面显示的备用方法从非默认配置文件中读取数据