单个app.config多项目c#

ala*_*ala 45 c# config

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

如何访问配置?

ConfigurationManager.AppSettings["config1"]
Run Code Online (Sandbox Code Playgroud)

Jon*_*ant 56

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

    • PROJECT1
    • 项目2
    • 项目3

做这个:

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

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

      添加为链接

编辑添加:

您正确地声明上述方法仅将文件共享到构建时.要在运行时使用共享文件,请参阅此问题答案.


ala*_*ala 19

常见的配置文件

<?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>
Run Code Online (Sandbox Code Playgroud)

访问映射的配置文件

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


mar*_*c_s 8

这是VS 2008中的"添加现有项"对话框:

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

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


mar*_*c_s 7

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

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

.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>
Run Code Online (Sandbox Code Playgroud)

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

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

  <MyConfiguration configSource="MyConfiguration.config" />
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后你的"MyConfiguration.config"将包含:

  <MyConfiguration> 
    <nestedElement>
      <dateTimeValue>10/16/2006</dateTimeValue>
      <integerValue>1</integerValue>
    </nestedElement>
  </MyConfiguration>
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以"外化"并因此共享至少大部分配置设置 - 只要它们位于您自己的自定义配置部分中.

有关.NET 2.0及其配置谜题的更多信息和优秀介绍,请参阅Jon Rista关于CodeProject上.NET 2.0配置的三部分系列.

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

  • 除非将所有应用程序部署到同一目录,否则此解决方案将无法运行.configSource属性不能包含绝对路径,也不能包含父目录的路径. (3认同)

Gre*_*g D 6

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

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

  • 我同意设计问题,但我必须构建 3 个使用相同配置文件的独立控制台应用程序。你知道我是否可以设置一个通用的 app.config 文件,以及如何访问 appSettings? (2认同)

And*_*ham 5

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

VS2015 C# 共享项目

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

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

Visual Studio 2015 - 共享项目教程:

通过选择File->New->Project或右键单击解决方案资源管理器中的解决方案并选择Add->New Project来创建新的共享项目。当对话框出现时,选择“共享项目”,在本例中为项目命名为 TestShared。

添加共享项目

添加新项目后,您可以添加其他项目所需的任何内容。在这种情况下,我们将添加 app.config。右键单击共享项目并选择Add->New Item。选择 Visual C#->Data->XML File,显然将其命名为 app.config。

应用程序配置文件

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

添加参考

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

我意识到这是一个较旧的问题,但由于它出现在 Google 中,我想我会回答这个问题,因此当其他人正在寻找他们对这个非常强大的 VS 功能所了解的相同内容时。