Visual Studio .NET类库项目中的多个App.config文件

im9ewurl  于 2023-02-05  发布在  .NET
关注(0)|答案(3)|浏览(315)

我正在创建一个类库项目。现在默认情况下,我有一个App.Config文件,这样我就可以将所有特定于环境的数据放入该配置文件中。
现在基于环境(无论是开发/测试/生产),我计划在VS2010中有三个App.Config文件,例如

App.Dev.Config

App.Test.Config

App.Prod.Config

想知道应用程序如何知道使用哪个配置文件。
任何人都实现了这个场景。任何代码示例/文章都会很有帮助。
谢谢

93ze6v8z

93ze6v8z1#

应用程序将使用名为YourExcectable.exe.config的配置文件,默认情况下,该文件是包含在您的(可执行)项目中的App.config文件。请注意,.NET仅为整个应用程序加载一个配置文件。您不能在未编码的情况下使用多个配置文件(即每个库项目一个)。
1.选项:可以使用生成后事件和不同的解决方案配置将一个或另一个App.config文件复制到输出文件夹
1.选项:可以使用ConfigurationManager类按代码加载备用配置文件。

flvlnr44

flvlnr442#

可以使用Map配置文件的概念在运行时加载不同的应用程序配置文件。首先,需要在项目中添加对System.Configuration.dll的引用。
复制到输出目录属性的值设置为如果更新则复制(请参阅屏幕截图)。仅对非默认配置文件(如App1.config、App2.config等)执行此操作。保留默认配置文件(即App.config)不变。由于此更改,生成项目时,项目输出目录(\bin\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文件。您必须使用本文中讨论的其他方法从非默认配置文件读取数据

idfiyjo8

idfiyjo83#

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

相关问题