【发布时间】:2012-06-29 08:04:13
【问题描述】:
场景
我有一个使用 ASP.Net 4.0 构建的 IIS 站点应用程序,使用它自己的应用程序 v4.0 应用程序池运行。该站点托管的是一个使用 ASP.Net 2.0 构建的子应用程序,具有自己的应用程序池。
<site name="Intranet" id="1" serverAutoStart="true">
<application path="/" applicationPool="Site-Intranet">
<virtualDirectory path="/" physicalPath="D:\sites\intranet" />
</application>
<application path="/ChildApp" applicationPool="App-ChildApp">
<virtualDirectory path="/" physicalPath="D:\apps\childapp" />
</application>
</site>
我的第一个想法是 2.0 应用程序应该使用 v2.0 应用程序池运行。这样做时访问 URL 会导致服务器错误 - 它无法识别父站点的 web.config 编译设置中的“targetFramework”属性。
我了解原因,并找到了两种解决方案/变通方法,但我并不完全理解每种方法的含义。
修复
1.将应用的应用池设置为v4.0。
2.将应用程序的应用程序池保留为 v2.0,但更改父站点的 web.config 以中断 <compilation> 部分的继承:
<location path="." inheritInChildApplications="false">
<system.web>
<compilation targetFramework="4.0" debug="true" />
</system.web>
</location>
问题:
这些修复/解决方案到底发生了什么?
在场景 #1 中,2.0 应用程序是否由 4.0 CLR 编译/运行?假设是这样,CLR 是否试图将其作为 2.0 应用程序运行(即向后兼容)?还是只是假设它是一个 4.0 的网络应用程序(看起来很危险)?
在场景 #2 中,我知道我们已经阻止子应用程序看到 targetFramework 属性,但是 2.0 CLR 真的在编译/运行应用程序吗?如果是这样,这就是在 ASP.Net 4.0 站点下安全运行 ASP.Net 2.0 应用程序所需的全部内容吗?
【问题讨论】:
-
您从哪里获得解决方法?它们在 Microsoft MSDN 文章 msdn.microsoft.com/en-us/library/a99txfy5.aspx 中未提及,因此它们可能无法按预期工作。
-
你有想过这个吗?
标签: asp.net .net iis application-pool .net-framework-version