【问题标题】:Multiple App.Config Files in .NET Class library project.NET 类库项目中的多个 App.Config 文件
【发布时间】: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

标签: c# .net visual-studio c#-4.0 app-config


【解决方案1】:

应用程序将使用名为 YourExcecutable.exe.config 的配置文件,默认情况下,该文件是包含在(可执行)项目中的文件 App.config。 请注意,.NET 只为整个应用程序加载一个配置文件。不编码就不能使用多个配置文件(即每个库项目一个)。

  1. 选项:您可以使用构建后事件和不同的解决方案配置将一个或另一个 App.Config 文件复制到输出文件夹

  2. 选项:您可以使用 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 文件。您必须使用如上所示的替代方式从非默认配置文件中读取数据

    【讨论】:

    猜你喜欢
    • 2010-12-17
    • 2011-06-12
    • 2015-12-27
    • 1970-01-01
    • 2016-10-18
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多