如何跨多个 Visual Studio 项目实施每个项目的 appSettings 和全局 appSettings?

How can I implement per-project appSettings and global appSettings across multiple Visual Studio projects?

我在一个 Visual Studio 解决方案中有多个项目,我有一些设置是特定于项目的,其他设置是全局的。配置文件明智我想完成以下内容:

我的计划是使用 <appSettings file="..."> 中文件属性的能力来合并每个项目和全局设置,如下所示:

WebProject1 的 web.config:

  <appSettings file="WebProject1.config">
    <add key="WebProject1Setting1" value="WebProject 1 Setting 1" />
  </appSettings>

WebProject1.config:

  <appSettings file="Global.config">
    <add key="WebProject1Secret1" value="WebProject 1 Secret 1" />
  </appSettings>

Global.config:

  <appSettings>
    <add key="GlobalSetting1" value="Global setting 1" />
  </appSettings>

但显然 只有 顶层 web.config 可以包含另一个配置文件,因为我在构建时遇到以下错误:

Unrecognized attribute 'file'. Note that attribute names are case-sensitive.

Source Error:

我的 objective 是定义 Global.config 中所有项目通用的设置,然后在顶级 web.config 文件以及包含的配置文件,如 WebProject1.config.

有什么建议吗?

您不能嵌套包含配置文件。 IE。 web/app.config appsetting 包括另一个设置文件,该文件又包括另一个设置文件,依此类推。 appsetting 上的文件属性仅适用于主 web/app.config 文件。

要实现您想要的效果,您可以在每个项目的 web.config 文件中使用单独的部分进行秘密设置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<configSections>
<section name="SecretSettings" 
type="System.Configuration.NameValueFileSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"></section>
</configSections>

<SecretSettings configSource="secretsettings.config"></SecretSettings>

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<appSettings>
</appSettings>

</configuration>

现在从

这样的程序访问您的设置
var secretSettings =(NameValueCollection)ConfigurationManager.GetSection("SecretSettings");

确保文件 secretsettings.config 在其属性中设置为始终复制到输出文件夹。