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

时间:2017-03-26 03:14:18

标签: .net visual-studio web-config configuration-management

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

  • 通过外部化全局设置文件
  • ,可以在所有项目中重用通用/全局设置
  • 具有项目特定的配置设置(没有问题)
  • 具有项目特定的配置机密,这些机密被外部化为单独的文件并位于工作目录之外

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

WebProject1&#39; 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可以包含另一个配置文件,因为我在构建时遇到以下错误:

  

无法识别的属性&#39;文件&#39;。请注意,属性名称是   区分大小写的。

     

来源错误:

Error

我的目标是定义Global.config中所有项目共有的设置,然后在顶级web.config文件以及包含的配置文件中定义项目特定的设置,例如{ {1}}。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您无法嵌套包含配置文件。即。一个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设置为始终复制到其属性中的输出文件夹。