asp.net - 具有 2.0 应用程序池的子应用程序在具有 4.0 应用程序池的站点下运行

标签 asp.net .net iis application-pool .net-framework-version

场景

我有一个使用 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 Web 应用程序(看起来很危险)?

在场景 #2 中,我知道我们已阻止子应用程序查看 targetFramework属性,但是 2.0 CLR 真的编译/运行应用程序吗?如果是这样,这就是在 ASP.Net 4.0 站点下安全运行 ASP.Net 2.0 应用程序所需的全部内容吗?

最佳答案

我多次使用场景#2,从未遇到过任何问题。所以是的这就是在 ASP.Net 4.0 站点下安全运行 ASP.Net 2.0 应用程序所需的全部内容。

尽管没有人可以回答您的两个应用程序一定会以这种方式协同工作。可能最好进行完整的系统测试,如果您确实发现任何特定问题,请提出新问题。

关于asp.net - 具有 2.0 应用程序池的子应用程序在具有 4.0 应用程序池的站点下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11233852/

相关文章:

c# - .NET System.Security.Cryptography key 派生问题 (AES/Rijndael)

.net - MemoryFailPoint 无条件抛出 InsufficientMemoryException

iis - 当 .NET Core 托管包的版本落后于开发计算机版本时会发生什么

c# - 如何在 system.array - C# 中保留 null?

linux - Windows 生产服务器上的 Drupal 7 和 WordPress 3.8?

c# - 为什么在我的 ASP.Net 网站上大约每周一次出现 System.IO.FileLoadException : Could not load file or assembly,?

asp.net - Elmah - ASP.NET -> 多个连接字符串 -> 在代码中设置 SQL 错误日志连接字符串

c# - EntityFramework - 是否可以将整个上下文数据库加载到内存中?

javascript - 模态弹出扩展程序中的运行时错误

c# - 如何动态设置母版页?