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

问题描述 投票:0回答:4

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

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

App.Dev.Config

App.Test.Config

App.Prod.Config

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

任何人都实现过这个场景。任何代码示例/文章都会有帮助。

谢谢

c# .net visual-studio c#-4.0 app-config
4个回答
18
投票

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

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

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


13
投票

可以使用映射配置文件的概念来在运行时加载不同的应用程序配置文件。首先,您需要在项目中添加对 System.Configuration.dll 的引用。

复制到输出目录属性的值设置为如果较新则复制(请参阅屏幕截图)。这只需要对非默认配置文件执行此操作,例如App1.config、App2.config 等。保留默认配置文件即 App.config 不变。由于此更改,当项目构建时,所有非默认应用程序配置文件将在项目输出目录 (in\debug) 中可用。该属性的默认值为请勿复制

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

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 文件。您必须使用本文中讨论的替代方法来从非默认配置文件中读取数据


11
投票

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


0
投票

在不使用任何第三方扩展或不编写一行代码的情况下执行此操作的最简单方法如下...

假设每个环境的配置文件在项目结构的根目录中的命名如下: 应用程序调试配置 应用程序.release.config ETC... (您不再需要默认的 app.config)

您可以根据您的环境为每个创建更多构建配置和应用程序配置文件。

将此行添加到项目构建后事件中:

copy "$(ProjectDir)app.$(Configuration).config" "$(TargetPath).config"
© www.soinside.com 2019 - 2024. All rights reserved.