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

标签 c# .net visual-studio

创建新的 Visual C# 控制台应用程序 (.NET Framework 4.5) 后,此类项目包含默认的 App.config 文件。

New Visual C# Console Application

将 System.Configuration 的引用添加到项目中并在一些源文件中使用它 using System.Configuration; 我可以使用静态类 ConfigurationManager 来操作 App。配置文件。但是之前,我想在文件中添加一些设置,所以它有点像这样:

<?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 配置文件名等,这是否不是一个坏习惯。我知道如何在调试/ Release模式下使用不同的配置,但在我的例子中,我有一个应用程序,例如,它可以在发布时以不同的模式运行以用于不同的目的。

问题:是否可以在一个项目中有多个配置文件,并且能够切换我想使用的配置文件。这不是一种不好的做法吗,我应该使用另一种方法来达到我的目的吗?使用构建事件不适合我的情况(我认为)。

PS. 很抱歉我的问题太长了,但是我的问题很简单,可以用两句话来问,但是作为 rules说,问题应该包含详细信息。

更新: 从已经existing answer “选项:您可以使用 ConfigurationManager 类通过代码加载备用配置文件。”来自阅读msdn我不知道应该使用哪种方法。我应该打开 Exe 配置吗?

最佳答案

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

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");

关于c# - 如何在一个项目中使用多个应用程序配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557437/

相关文章:

c# - "Script-Migration"可以在 .NET Entity Framework Core 中创建数据库吗?

c# - 如何在 UWP 应用程序中为椭圆的宽度和高度设置动画

c# - 按任意时间间隔对 DateTime 进行分组

c# - 如何使用 Entity Framework 比较 Linq to SQL 中 DateTime 类型中没有时间的日期?

visual-studio - SQL Server Management Studio 解决方案与 Visual Studio 项目

visual-studio - 将现有表单添加到 C++/CLI WinForms 项目

visual-studio - 实现类 "inherit"XML 注释可以从其实现的接口(interface)中获得吗?

c# - C# 中的泛型编译错误(但在 VB.NET 中有效)

c# - 字符串比较的奇怪之处

c# - 如何在代码隐藏中获取 jQuery 多选 UI 的选定值?