我正在创建一个类库项目。 默认情况下,我有一个App.Config文件,因此我将所有特定于环境的数据放入该配置文件中。
现在根据环境(开发/测试/生产),我计划在VS 2010中拥有三个App.Config文件,如下所示:
App.Dev.Config
App.Test.Config
App.Prod.Config
想知道应用程序如何知道要使用哪个配置文件。
有没有人实现过这种情况。任何代码示例/文章都会很有帮助。
谢谢
我正在创建一个类库项目。 默认情况下,我有一个App.Config文件,因此我将所有特定于环境的数据放入该配置文件中。
现在根据环境(开发/测试/生产),我计划在VS 2010中拥有三个App.Config文件,如下所示:
App.Dev.Config
App.Test.Config
App.Prod.Config
想知道应用程序如何知道要使用哪个配置文件。
有没有人实现过这种情况。任何代码示例/文章都会很有帮助。
谢谢
此应用程序将使用名为 YourExcecutable.exe.config 的配置文件,该文件默认为包含在您(可执行)项目中的 App.config 文件。
请注意,.NET仅为整个应用程序加载一个配置文件。如果不编码,则无法使用多个配置文件(即每个库项目一个)。
选项:您可以使用 postbuild 事件和不同的解决方案配置将一个或另一个 App.Config 文件复制到输出文件夹
选项:您可以使用 ConfigurationManager 类通过代码加载替代的配置文件。
在运行时加载不同的应用程序配置文件可以使用映射配置文件的概念来完成。首先,您需要在项目中添加对System.Configuration.dll的引用。
将Copy to Output Directory属性的值设置为Copy if newer(参见屏幕截图)。这仅适用于非默认配置文件,例如App1.config、App2.config等。将默认配置文件App.config保持原样。通过此更改,当构建项目时,所有非默认应用程序配置文件都将在项目输出目录(\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;
如果您有多个应用程序(也称为应用程序)配置文件,则可以在默认的 App.config 文件中保留设置,借助此设置,您可以在运行时决定要加载哪个非默认配置文件,例如 App1.config 。
注意:现在看一下下面的代码:ConfigurationManager.AppSettings["DeployEnv"]
这段代码仍将从默认的App.config文件中读取数据。这种行为无法更改。没有办法禁止加载默认的App.config文件。您必须使用本帖讨论的其他方法来从非默认的配置文件中读取数据。
sample.exe.config
更改为sample.dll.config
,但我的整个生态系统都希望直接使用exe配置文件。 - Jan Zahradník