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

Posted

技术标签:

【中文标题】.NET 类库项目中的多个 App.Config 文件【英文标题】:Multiple App.Config Files in .NET Class library project 【发布时间】:2011-05-26 03:18:09 【问题描述】:

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

现在基于Environment(无论是Dev/Test/Production),我打算在VS 2010中有三个App.Config文件比如

App.Dev.Config

App.Test.Config

App.Prod.Config

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

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

谢谢

【问题讨论】:

VB .NET 解决方案参考thispost 【参考方案1】:

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

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

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

【讨论】:

+1: 在这里要非常清楚:永远不会使用与装配项目关联的配置文件。只会使用主项目配置文件。您需要在该级别控制它们。 @NotMe:我知道你的想法更明确,但有一些方法可以包含库配置文件。给它们一个唯一的名称,将它们设置为复制到输出目录,并让您的启动项目的 app.config 将它们作为外部链接引用。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

这里是关于如何从非默认配置文件中读取配置数据的代码 sn-p:

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 文件。您必须使用如上所示的替代方式从非默认配置文件中读取数据

【讨论】:

感谢您的解决方案!我为VB做了转换:***.com/questions/55547789/…

以上是关于.NET 类库项目中的多个 App.Config 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 app.config 与类库一起使用

web.config与.dll中的app.config

类库的 app.config 中的绑定重定向有啥作用吗?

使用类库从 web.config/app.config 获取配置设置

加载了错误的 App.config

从 .NET 中的 app.config 或 web.config 读取设置