找出应用程序是否在 1.1 下运行的快速方法是敲出一个显示环境版本的快速脚本:
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
Response.Write(System.Environment.Version.ToString());
}
</script>
或者,如果您遇到黄屏死机,那么您会在页面底部看到版本号:
![替代文字](https://i.stack.imgur.com/pdOTG.jpg)
我怀疑在添加新应用程序池或修改现有应用程序池时无法选择 Framework v1.1的原因是 1.1 安装程序不知道如何将一些关键的元数据或配置信息添加到 IIS。
.NET 2.0 与 2008 一起发布,而 .NET 4.0 是后来的产品,它也对 IIS7 友好,因此很可能有更好的 IIS 集成。或者,v1.1 没有一些基本的元数据块,IIS7 的 InetMgr 需要能够将其添加到其各种列表中。
您可以在 ASP.NET 1.1 池基本设置对话框的下拉列表中看到 v1.1而不是其他池的原因是因为它已经设置,因此只会包含在列表中。我在新创建的 ASP.NET 1.1 池上进行了实验和更改,并将其设置为 2.0,保存,然后重新打开。结果是 v1.1 不再可见。
此外,它之所以称为 v1.1 而不是.NET Framework v1.1.4322managedRuntimeVersion
是因为该值是从applicationHost.config
. 版本 2.0 和 4.0 显示完整描述的原因是,可能存在一些 IIS 友好元数据,其中正在查找 1.1 不存在的资源字符串。
要将池设置为在创建时使用 v1.1,您必须managedRuntimeVersion
使用以下方法手动设置属性APPCMD.EXE
:
appcmd 添加 apppool /name:"NewPool" /managedRuntimeVersion:"v1.1"
这在您链接到的文章的底部进行了解释。
要将现有池更改为使用 1.1,您还必须使用命令行APPCMD.EXE
工具:
appcmd 设置 apppool /apppool.name:"SomeOtherPool" /managedRuntimeVersion:"v1.1"
有趣的是,您可以设置managedRuntimeVersion
为任何旧值:
![替代文字](https://i.stack.imgur.com/XsyTB.jpg)
我希望我能解释为什么 ASP.NET 1.1 应用程序池会神奇地创建或者安装程序如何设法使用处理程序映射做正确的事情(不知何故所有正确preConditions
的设置,所以安装程序已更新或 IIS 有一些一种寻找 1.1 正在安装和修复的触发器)。
更新:
我联系了本文作者比尔·斯台普斯:
如何在 Vista 和 Windows 2008 上使用 IIS7 安装 ASP.NET 1.1
我问他 1.1 安装程序或 IIS7 如何设法在处理程序映射、创建“ASP.NET 1.1”应用程序池等方面做正确的事情。这是他的回复:
“如果没记错的话,在 Vista/Windows 2008 中创建了一个应用程序兼容性 shim,它将检测 1.1 安装程序并执行应用程序池创建/处理程序映射。但是,在 Windows 7/Windows Server 2008 R2 中,.NET 框架 1.1 不是更长时间的支持,如果此代码被撤消,我不会感到惊讶,尽管我不确定。”
于是谜团解开了。