如何在一个项目中使用多个应用程序配置文件?

16
创建新的Visual C#控制台应用程序(.NET Framework 4.5)后,此项目将包含默认的App.config文件。
在项目中添加对System.Configuration的引用并在某些源文件中使用它 using System.Configuration;,我可以使用静态类ConfigurationManager来操作App.config文件。但是在此之前,我想向文件中添加一些设置,使其类似于这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="DeployWeb" value="true" />
  </appSettings>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

现在,我可以写这样的代码来获取设置的值:

Boolean deployWeb = false;
Boolean.TryParse(ConfigurationManager.AppSettings["DeployWeb"], out deployWeb);
然而我没有设置要读取哪个配置文件,但没关系,因为有默认的配置文件。但是我可以通过在项目上右键单击-> 添加-> 新建项...-> 应用程序配置文件来添加更多配置文件,这样我就有了例如图片中的5个配置文件:

Several configuration files in a project

ConfigurationManager仍将读取默认的配置文件,但我想手动控制使用哪个配置文件。我想知道是否有适当的方式来设置ConfigurationManager要使用的配置文件名称等,以及这是否是不良做法。我知道如何在debug/release模式下使用不同的配置,但是在我的情况下,我有一个应用程序,可以在发布的不同目的下以不同模式运行,例如。

问题:在项目中是否可以拥有多个配置文件并具有切换要使用的文件的功能?这是不好的实践吗?我应该使用其他方法来达到我的目的吗?在我的情况下,使用生成事件是不合适的(我认为)。

PS。 对于我的问题我很抱歉提得比较冗长,它实际上可以用两个句子来表达,但是根据规则,问题应该包含细节。

更新: 从已经存在的答案中,“选项:您可以使用ConfigurationManager类通过代码加载替代配置文件。” 从阅读msdn我没有理解我应该使用哪些方法。 我应该打开Exe配置吗?


https://dev59.com/A2855IYBdhLWcg3wPB36 - Jonesopolis
@Jonesy 是的,我看到那个问题了,我刚刚更新了我的问题,你能看一下吗? - prvit
在C#项目模板中默认没有引用System.Configuration.dll程序集,因此需要显式地引用它才能使用ConfigurationManager类。 - RBT
1个回答

13

可以使用映射的配置文件来完成,

ExeConfigurationFileMap configFileMap = 
        new ExeConfigurationFileMap();
    configFileMap.ExeConfigFilename = "App4.config"; // full path to the config file

    // Get the mapped configuration file
   Configuration config = 
      ConfigurationManager.OpenMappedExeConfiguration( 
        configFileMap, ConfigurationUserLevel.None);

   //now on use config object

AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");

1
完整示例请参见http://weblogs.asp.net/kbarrows/using-multiple-config-files-in-one-application - Ajay Kelkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接