如何从两个单独的项目(.csproj 文件)中引用 app.config?

How can I reference an app.config from two separate projects (.csproj files)?

我的应用程序中有两个 .csproj 文件,它们都生成一个 .exe,并且都有需要来自 app.config 的值的 C# 程序。因此,由于只能有一个 app.config 文件(它们构建在同一个文件夹中),我想我只是把第二个程序的值(我们称之为 b.cs/b.exe)需要在第一个程序(a.cs/a.exe)的.csproj的app.config中。但是第二个程序似乎无法访问app.config。它在那里并且值在那里但是当我 运行 string x = ConfigurationManager.AppSettings["BuildVersion"]; 时,x 总是空的。如果我 运行 来自 a.exe 的相同代码,它工作正常。就好像 app.config 在 .exe 文件中嵌入了一些我无法在任何地方看到或设置的信息。

知道如何从两个不同的项目中访问 app.config 中的值吗?

您可以在一个项目中保留 app.config,但在另一个项目中将其作为 链接(虚拟)文件添加。来自此处的说明 Including content files in .csproj that are outside the project cone

  • 在VS中右击项目
  • 添加 -> 现有项目...
  • 找到文件。
  • Select 它和,
  • 添加为 Link(在对话框的添加按钮中下拉)。

您可以使用 app.config appSettings 节点中的文件参数将其指向您需要的其他应用的配置设置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
    </startup>
    <appSettings file="C:\MasterConfig.config">
        <add key="applicationMode" value="Dev"/>
        <add key="ServiceInterval" value="02:00:00"/>
    </appSettings>
</configuration>

然后像往常一样参考您需要的项目。

您是否尝试过添加为 linked 项目

将 app.config 放在一个公共位置,然后右键单击每个项目以 select 添加 -> 现有项目。 Select 文件并单击 添加 按钮上的箭头并选择 添加为 link.

Share code with Add as Link

添加为 link 有效,但我还需要将 b.exe.config 文件复制到输出目录。我猜除了 a.exe.config 之外还生成了该文件,它们只是基于添加的 link.

彼此的副本