单一的app.config多项目C#(single app.config multi-project

2019-06-21 08:13发布

我想用3个不同的项目中使用一个单一的app.config。

如何访问配置?

ConfigurationManager.AppSettings["config1"]

Answer 1:

比方说,你有这样的文件夹结构:

    • PROJECT1
    • 项目2
    • 项目3

做这个:

  1. 创建解决方案级别的文件夹App.config文件。 你不会找到一个选项添加从模板中的App.config文件,所以刚创建名为App.config中一个新的空文本文件,并在常规App.config文件的内容粘贴。
  2. 对于在Solution Explorer中每个项目:

    1. 右键单击并选择Add > Existing Item
    2. 找到文件
    3. 选择Add as link的下拉框旁边Add按钮。

编辑补充:

您正确地指出,上述方法仅适用于共享文件了建立时间。 要使用在运行时将共享文件,看到这个问题的答案 。



Answer 2:

常见的配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section 
            name="appSettings" 
            type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
            />
    </configSections>
    <appSettings>
        <add key="key1" value="value1"/>
    </appSettings>
</configuration>

访问映射配置文件

ConfigurationFileMap fileMap = new ConfigurationFileMap(file); //Path to your config file
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
string value = configuration.AppSettings.Settings["key1"].Value;


Answer 3:

这里是在VS 2008中的“添加现有项目”对话框:

添加现有项目对话框http://i27.tinypic.com/72bwo6.jpg

点击小下拉指标“添加”按钮,然后选择“添加为链接”从上下文菜单中。



Answer 4:

我发现这个按钮,打开app.config中的链接,但导致在构建再次为每个项目创建单独的配置文件,因此,部署3项目的时候,我将有3个配置文件。 我想做的事,是保持所有项目的单个文件在一定的解决方案。 我能做到这一点?

是的-你可以这样做,但你应该这样做?

在.NET应用程序的基本假设是,一个应用程序=一个配置文件。 开箱即用,并用一个简单的方法,你不能共享应用程序之间的配置文件。

如果你创建自己的自定义配置部分,你可以“外包”给那些外部文件,这可能是共享的。 想象一下,你创建一个名为“MyConfiguration”,那么你的app.config将看起来像你自己的自定义配置部分:

<configuration>
  <configSections>
    <section name="MyConfiguration" 
             type="MyConfigurationSection, MyConfigurationAssembly" />
  </configSections>

  <MyConfiguration>
    <nestedElement>
      <dateTimeValue>10/16/2006</dateTimeValue>
      <integerValue>1</integerValue>
    </nestedElement>
  </MyConfiguration>
</configuration>

你可以在自己的文件你“MyConfiguration”部分,并从您的应用程序的配置中引用它:

<configuration>
  <configSections>
    <section name="MyConfiguration" 
             type="MyConfigurationSection, MyConfigurationAssembly" />
  </configSections>

  <MyConfiguration configSource="MyConfiguration.config" />
</configuration>

而你的“MyConfiguration.config”将包含然后:

  <MyConfiguration> 
    <nestedElement>
      <dateTimeValue>10/16/2006</dateTimeValue>
      <integerValue>1</integerValue>
    </nestedElement>
  </MyConfiguration>

通过这样做,你可以“外部化”,从而共享至少大部分的你的配置设置 - 提供他们在自己的自定义配置部分。

欲了解更多信息和良好的介绍到.NET 2.0及以上配置的奥秘,看到.NET 2.0配置了乔恩Rista的三部系列在CodeProject上。

  • 解开的.NET 2.0配置的奥秘
  • 解码的.NET 2.0配置的奥秘
  • 裂化的.NET 2.0配置的奥秘

强烈推荐,写得很好,非常有帮助!



Answer 5:

一个设计方案是为了避免直接从您的类库项目共访问的app.config,从而避免了额外的外部依赖。

相反,只有你的可执行项目所知道的配置文件,它可以适当的配置信息明确地传递给库时,从他们创建的对象或初始化它们。



Answer 6:

我理解,这是一个老问题,但有实现这一目标的一个更简单的方法。 如果您在使用Visual Studio 2008或更高版本有一个名为“共享工程”项目类型。

共享项目可以有几乎任何类型的其他项目可以包含。 这不仅为C#但是对于VS2015支持所有语言。 当一些包含在共享项目中添加对它的引用(见下文)后,可用于其他项目。

在共享项目VS共享库类的主要区别是,当你编译程序的一切,是在共享项目将直接编译到您的项目不作为单独的文件(.DLL,.EXE)。 认为它像一切是在共享项目中插入其他项目。 这里是设置了这一点,并使用它的一小教程:

Visual Studio的2015年 - 共享的项目教程:

通过选择在Solution Explorer解决方案文件- >新建- >项目或右键单击创建新的共享项目,然后选择添加- >新建项目 。 当对话框显示向上选择“共享工程”,为该项目在这个例子中TestShared的名称。

新项目被添加后,您可以添加任何你需要提供给其他项目。 在这种情况下,我们将添加的app.config。 右键点击共享项目,然后选择添加- >新建项目 。 选择Visual C# - >数据 - > XML文件命名它显然是App.config中。

最后,通过右键点击你需要共享的项目,然后选择添加 - >引用的项目添加到共享项目的参考。 在参考文献管理器对话框中选择您的共享项目,它将在左边的“共享工程”项目下上市。

现在一切是在共享项目在其他项目中可用,也没有必要做任何使用进口或类似的东西。 它只是工作。 这种模式是非常方便的,当你正在开发一个程序,需要有几种不同的GUI的(在Windows,iOS版,Android版等)。 例如,你可以有一个共享的项目为“核心”功能,然后对每一个你想在你的程序来支持不同的操作系统的一个独立的GUI项目。

我意识到这是一个较老的问题,而是因为这在谷歌出现了我想,当别人都在寻找他们知道这个VS功能非常强大的同样的事情,我会回答这个问题如此。



Answer 7:

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config = ConfigurationManager.OpenExeConfiguration(Path.Combine(@"D:\", "config.exe"));
foreach (string key in config.AppSettings.Settings.AllKeys)
{
   string value = config.AppSettings.Settings[key].Value;
   ConfigurationManager.AppSettings.Set(key, value);
}


文章来源: single app.config multi-project c#
标签: c# config