单个app.config多项目c#

时间:2009-09-01 11:22:30

标签: c# config

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

如何访问配置?

ConfigurationManager.AppSettings["config1"]

7 个答案:

答案 0 :(得分:54)

假设你有这个文件夹结构:

    • PROJECT1
    • Project2的
    • 项目3

这样做:

  1. 在解决方案级别文件夹中创建App.config文件。您将找不到从模板添加App.config文件的选项,因此只需创建一个名为App.config的新空文本文件,然后粘贴常规App.config文件的内容。
  2. 对于解决方案资源管理器中的每个项目:

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

      Add as link

  3. 已编辑添加:

    您正确地声明上述方法仅将文件共享到构建时。要在运行时使用共享文件,请参阅answers to this question

答案 1 :(得分:16)

公共配置文件

<?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;

答案 2 :(得分:8)

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

Add existing item dialog

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

马克

答案 3 :(得分:7)

  

我找到了按钮,然后打开了   app.config作为链接,但是   在构建时再次创建   为每个项目单独配置文件,   因此,在部署3时   项目,我将有3个配置文件。   我想做的是保持一个   a。中所有项目的单个文件   某种解决方案我能这样做吗?

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

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

如果您创建自己的自定义配置部分,则可以将这些部分“外包”到可以共享的外部文件。想象一下,你创建了自己的自定义配置部分,名为“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及其配置谜题的更多信息和精彩介绍,请参阅Jon Rista关于CodeProject上.NET 2.0配置的三部分系列文章。

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

马克

答案 4 :(得分:6)

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

相反,只有您的可执行项目知道配置文件,它可以在从库中创建对象或初始化它时显式地将相应的配置信息传递给库。

答案 5 :(得分:4)

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

VS2015 C# Shared Project

共享项目可以包含其他类型的项目可以包含的任何内容。这不仅适用于C#,也适用于VS2015支持的所有语言。当共享项目中包含某些内容后,您可以在添加对它的引用后将其用于其他项目(参见下文)。

共享项目VS共享库中的类的主要区别在于,当您编译程序时,共享项目中的所有内容将直接编译到您的项目中,而不是作为单独的文件(.dll,.exe)。可以想象它将共享项目中的所有内容都插入到其他项目中。这是一个关于设置和使用它的小教程:

Visual Studio 2015 - 共享项目教程:

通过选择 File-&gt; New-&gt; Project 或右键单击解决方案资源管理器中的解决方案并选择 Add-&gt; New Project 。当对话框显示时选择“共享项目”,在本例中为项目命名为TestShared。

Add Shared Project

添加新项目后,您可以添加其他项目可用的任何内容。在这种情况下,我们将添加app.config。右键单击共享项目,然后选择添加 - >新项。选择Visual C# - &gt; Data-&gt; XML文件,将其命名为app.config。

app.config

最后通过右键添加对共享项目的引用单击需要与之共享项目的项目,然后选择添加 - >参考。在Reference Manager对话框中选择您的共享项目,它将列在左侧的“共享项目”项下。

Add Reference

现在共享项目中的所有内容都可以在另一个项目中使用,不需要使用导入或任何类似的东西。它很简单。当您开发一个程序并且需要有几个不同的GUI(Windows,iOS,Android等)时,这种模式非常方便。例如,您可以拥有一个用于“核心”功能的共享项目,然后为您希望在程序中支持的每个不同操作系统提供单独的GUI项目。

我意识到这是一个较老的问题但是因为这出现在谷歌我认为我会回答这个,所以当其他人正在寻找他们所知道的这个非常强大的VS功能时。

答案 6 :(得分:1)

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