【问题标题】:ASP.NET configuration inheritanceASP.NET 配置继承
【发布时间】:2011-02-14 20:43:13
【问题描述】:

我有一个 ASP.NET 应用程序,它在 web.config 中定义了一个自定义配置部分。

最近我有一个客户想要部署应用程序的两个实例(除了现有的生产应用程序之外的测试)。

客户选择的配置是:

  • foo.com - 生产应用程序
  • foo.com/Testing - 测试应用程序

在这种情况下,ASP.NET 配置引擎决定将 foo.com/web.config 中的设置应用到 f​​oo.com/Testing/web.config。

谢天谢地,这导致了配置错误,因为该部分是在第二级重新定义的,而不是给人以两个 Web 应用程序相互隔离的错误印象。

我想做的是指定我的配置部分不是继承的,并且必须为任何需要它的 Web 应用程序重新定义,但我无法找到一种方法来做到这一点。

我的 web.config 最终是这样的

<configuration>
  <configSections>
    <section name="MyApp" type="MyApp.ConfigurationSection"/>
  </configSections>
  <MyApp setting="value" />
    <NestedSettingCollection>
      <Item key="SomeKey" value="SomeValue" />
      <Item key="SomeOtherKey" value="SomeOtherValue" />
    </NestedSettingCollection>
  </MyApp>
</configuration>

【问题讨论】:

  • 您能否进一步解释一下“谢天谢地,这导致了配置错误,因为该部分是在第二级重新定义的,而不是给人以两个 Web 应用程序相互隔离的错误印象。”
  • 嵌套配置设置正在向 NestedSettingCollection 添加一个值,其键与父配置中添加的值相同。这会导致异常“已存在具有相同键的条目”,而不是仅从父级获取设置。想象一下,如果您在基础应用程序中有一个连接字符串指向生产数据库并在子目录中定义连接字符串属性以指向测试数据库,并在您删除了一堆您一直指向的数据后发现会发生什么在生产中:(
  • 我认为 foo.com 是网站的根目录,测试设置是该网站中的应用程序。 ASP.NET 将继承网站的配置,这就是您所遇到的。

标签: asp.net web-config


【解决方案1】:

您是否尝试过使用位置元素?不确定它是否有效,但值得一试。把这个放到Testing项目的web.config里试试看吧。

  <location path="." inheritInChildApplications="false">
    <MyApp setting="value" /> 
    ...
    </MyApp>    
  </location>

两个关于使用位置元素的链接

http://www.aspdotnetfaq.com/Faq/how-to-disable-web-config-inheritance-for-child-applications-in-subfolders-in-asp-net.aspx

http://msdn.microsoft.com/en-us/library/b6x6shw7.aspx

【讨论】:

  • 这是一个有趣的方法。我希望找到一种方法来定义我的配置设置不继承,但我可能能够更改默认 web.config 以定义位置部分中的相关部分
  • +1 - 我已经使用 location 元素来解决作者遇到的问题。不过要小心。仅将您不希望在位置标签中继承的内容包装起来。我将大部分 web.config 包装在元素中,并遇到了调试器最初不会附加到进程的问题。
【解决方案2】:

在 /testing 下的 web.config 中,执行以下操作:

<configuration> 
  <configSections> 
    <remove name="MyApp"/> <===========
    <section name="MyApp" type="MyApp.ConfigurationSection"/> 
  </configSections> 
  <MyApp setting="value" /> 
    <NestedSettingCollection> 
      <Item key="SomeKey" value="SomeValue" /> 
      <Item key="SomeOtherKey" value="SomeOtherValue" /> 
    </NestedSettingCollection> 
  </MyApp> 
</configuration> 

【讨论】:

  • 这似乎没有任何改变。我仍然收到相同的错误消息。
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2018-11-04
  • 2011-12-20
相关资源
最近更新 更多