ASP.NET Web.config <runtime>元素未继承到子应用程序中

Nei*_*eil 4 .net c# asp.net iis-7.5 asp.net-mvc-5

我有一个作为IIS网站创建的ASP.NET MVC5应用程序,具有自己的.NET 4.0 CLR应用程序池和位于以下位置的物理路径:

C:\Websites\XXX\Web\en-HK
Run Code Online (Sandbox Code Playgroud)

在此站点下,我在IIS(另一个MVC5应用程序)中有一个子应用程序“ zh”,再次具有其自己的.NET 4.0 CLR应用程序池和位于以下位置的物理路径:

C:\Websites\XXX\Web\zh-Hans-HK
Run Code Online (Sandbox Code Playgroud)

这两个站点都有自己的web.configs,子站点仅覆盖<appSetting>正在运行的单个站点。但是,不起作用的是父级元素似乎没有被继承下来。元素看起来像:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
Run Code Online (Sandbox Code Playgroud)

当我第一次在浏览器中运行子应用程序时,我看到一个YSOD抱怨找不到MVC 3.0-这是因为第3方DLL正在寻找MVC 3,但是没有重定向到5.2的绑定。

如果我将<runtime>元素粘贴到子web.config中,该错误就会消失。

是否<runtime>通过设计阻止了该元素在子应用程序中继承,或者我的设置已关闭?在machine.config中似乎没有受到保护。

更新

我认为问题与组装探测有关。

启用程序集加载跟踪后,我可以看到子应用程序中的YSOD是由ELMAH对MVC3的依赖性引起的,当.NET探测应用程序配置(我的子应用程序web.config)时,它找不到任何<assemblyBinding>信息,因此继续检查aspnet.config而不是我的父站点web.config,它确实具有该<assemblyBinding>信息。

在此处输入图片说明

我猜这种行为是设计使然?

TiM*_*och 5

Asp.Net引擎将按照IIS层次结构的Web.config文件组合为最终配置源,.Net运行时将其用于特定网站中的请求

但是,该<runtime>部分有点特殊,因为它级别太低。托管代码不使用它,而是非托管.Net运行时主机使用它来定义其总体行为(程序集绑定是最常见的,但与GC相关的东西以及其他东西)