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

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

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

App.Dev.Config App.Test.Config App.Prod.Config 

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

有人实现了这个场景。 任何代码样本/文章都会有所帮助。

谢谢

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

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

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

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

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

将默认值(App.config)以外的所有其他配置文件(例如App1.config,App2.config等)的Copy to Output Directory属性值设置为Copy to Output Directory new。 这样,在构建项目后,它们将在项目输出目录(\ 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文件。 您必须使用上面显示的备用方法从非默认配置文件中读取数据

这是一篇关于使用XSLT为不同部署转换web.config 的文章 。 这是第二种采用不同的方法。

不幸的是,微软发布了他们的Web.config转换function而不支持其他.config文件:(