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

Rit*_*ita 22 .net c# visual-studio c#-4.0

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

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

App.Dev.Config

App.Test.Config

App.Prod.Config
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Jan*_*Jan 17

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

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

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

  • +1:并且在这里非常清楚:永远不会使用与装配项目相关的配置文件.仅使用主项目配置文件.你需要在那个级别控制它们. (7认同)

due*_*l0r 9

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


RBT*_*RBT 5

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

Copy to Output Directory除默认文件(App.config)以外的所有其他配置文件(例如App1.config,App2.config等)的属性值设置为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;
Run Code Online (Sandbox Code Playgroud)

如果您有多个应用程序配置文件,则可以在默认App.config文件中保留一个设置,借助该设置,您可以在运行时决定要加载哪个其他配置文件,例如App1.config

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

  • 谢谢你的解决!我为 VB 做了转换:/sf/ask/3888345261/ (2认同)