在 IIS 7.5 中停止从父 ASP.NET 应用程序继承 web.config

11
我们已经在IIS 7.5上部署了一个ASP.NET网站(App 1)。然后在该应用程序下创建了另一个ASP.NET应用程序(App 2)。但是在App 2中,我不想继承来自App 1的web.config
如果我尝试在App 1的web.config文件中执行以下操作:
<location path="." inheritInChildApplications="false"> 
    <configSections> 

    <!-- etc -->

    </configSections>
</location>

它报告了错误:

配置错误:无法读取配置节“configSections”,因为缺少部分声明。

如果我尝试执行以下操作:

<remove name = "system.web.extensions" /> 

它仍然报告相同的错误:


仅补充以上内容,APP 1(父级)使用的是 .net 3.5 框架,而 APP 2(子级)使用的是 .net 2.x 框架。 - Farrukh
.NET 3.5 运行在 .NET 2 框架之上。 - Surgical Coder
4个回答

7
如果您可以将子应用程序部署到单独的网站(同一台计算机,不同的端口),则应用请求路由可能会有所帮助。
解决方案类似于此帖子。首先,安装ARR。然后,在侦听非标准端口的网站上为“子”应用程序配置。接下来,在“父”应用程序的网站上配置重写规则,以匹配到“子”应用程序的原始路径。让此规则将请求转发到侦听新端口的新建网站。
我想发布一个示例,但我认为通过查看上面引用的帖子,这个工作方式是非常简单明了的。

这是一个非常好的解决方案,适用于像WordPress虚拟目录这样的东西,它托管在具有复杂web.config的站点的根目录中。 - Simon_Weaver

4

这对我很有帮助。

对于那些无法使位置路径解决方案起作用的人,你可能忘记了关闭位置元素标签(如果你只是在服务器上用文本编辑器编辑web.config)。这里有一个例子:

<configuration>
  <configSections>
 ...
  </configSections>
  <connectionStrings>
 ...
  </connectionStrings>
  <location path="." inheritInChildApplications="false">
  <system.web>
 ...
  </system.web>
 ...
  </location>
</configuration>

请注意,configSections和connectionStrings不应该放在location元素中,这可能是OP尝试失败的原因。

0

谢谢。正如我所提到的,这个<location path="." inheritInChildApplications="false">对于<configSections>无效。 - Farrukh

0

您不能将整个<configSections>配置元素包装在<location path="." inheritInChildApplications="false">中。这在ASP.NET中不受支持(尚未)。

来自文档:

SectionInformation.InheritInChildApplications Property

InheritInChildApplications属性仅适用于特定位置的配置设置。

此外:

获取或设置一个值,该值指示是否通过相关应用程序的子目录继承关联配置部分中指定的设置。

<configSection>元素是特殊的,不属于配置设置。它们用于定义配置设置的处理程序。

如果您需要从子应用程序中删除冲突的配置<section>,则可以在子应用程序的web.config文件中使用<remove>元素来完成此操作:

从一般设置架构中删除configSections元素

1
实际上,我们可以像这样删除单个项:<remove name="jsonSerialization"> 但是我们无法像这样删除“Sectiongroup”。<remove name="system.web.extensions">。这不起作用,这是主要问题。 - Farrukh
@farrukh - 你可以发一份你如何使用这个的例子吗? - Kev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接