.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 文件的主要内容,如果未能解决你的问题,请参考以下文章