在几个web.config文件中拆分'appSettings'部分

时间:2013-05-14 16:11:02

标签: c# asp.net .net web-config

我正在开发一个ASP.NET项目,我需要在我的web-app的appSettings部分添加一些设置。

现在这些设置正在成长,所以我想将它们组织在不同的文件中。我在我的应用程序的不同目录中创建了其他web.config文件,添加如下内容:

<?xml version="1.0"?>
<configuration>
  <system.web>
  </system.web>
  <appSettings>
    <add key="settingKey" value="settingValue" />
  </appSettings>
</configuration>

但是当我尝试通过ConfigurationManager.AppSettings["settingKey"]访问它们时,我得到null

那么,是否可以将设置拆分为不同的文件?还有另一种逻辑组织应用设置值的方法吗?

2 个答案:

答案 0 :(得分:1)

我知道这太旧了,可能甚至不适用于.NET Core,但适用于那些来自Google并使用非.NET Core json配置文件的人。这就是我通常做的事情......

我使用configSourcesweb.config中取出所有配置设置。这允许您通过提供相对位置来将特定配置部分指向不同的文件,例如,在配置部分(在根configSource中声明web.config的方式文件)...

<configuration>

  <log4net configSource="Config\debug\log4net.config" />
  <appSettings configSource="config\debug\settings.config" />
  <connectionStrings configSource="config\debug\connections.config" />    
  ...    
</configuration>

您可以根据需要为这些文件命名,只需确保指定的路径和文件存在于解决方案中。这是settings.config文件的样子......

<?xml version="1.0"?>
<appSettings>
  <add key="webpages:Version" value="3.0.0.0" />
  <add key="webpages:Enabled" value="false" />
  <add key="ClientValidationEnabled" value="true" />
  <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  <add key="foo" value="bar" />
</appSettings>

现在,相对路径是相对于项目根目录...

enter image description here

在上图中,您可以看到我为不同的部署环境提供了两种不同的路径,因为很明显我的连接字符串和设置在生产中是不同的。

然后您可以使用配置转换,以便应用程序可以使用正确的配置文件,无论它是处于调试还是发布模式......

enter image description here

这就是Web.Debug.config文件的样子......

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <log4net configSource="Config\debug\log4net.config" xdt:Transform="Replace" />
  <appSettings configSource="config\debug\settings.config" xdt:Transform="Replace" />
  <connectionStrings configSource="config\debug\connections.config" xdt:Transform="Replace" />
</configuration>

第一个版本几乎相同...替换提供给configSource属性的路径。而且它几乎就是这样。 还有其他web.config元素支持configSource设置,例如许多system.serviceModel子元素。

答案 1 :(得分:0)

如果当前正在执行的路径在该目录中,您将只能看到目录中的web.config设置。

所以例如: /MyDirectory/web.config

仅在您加载以下页面时才可见: /Mydirectory/MyTestPage.aspx

您不会在此处看到web.config设置,例如: /OtherDirectory/MyTestPage.aspx

这篇文章可能有所帮助: Creating a custom .config file in asp.net