【发布时间】:2011-02-14 20:43:13
【问题描述】:
我有一个 ASP.NET 应用程序,它在 web.config 中定义了一个自定义配置部分。
最近我有一个客户想要部署应用程序的两个实例(除了现有的生产应用程序之外的测试)。
客户选择的配置是:
- foo.com - 生产应用程序
- foo.com/Testing - 测试应用程序
在这种情况下,ASP.NET 配置引擎决定将 foo.com/web.config 中的设置应用到 foo.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