应用程序池的.NET版本是否可能自行更改?

应用程序池的.NET版本是否可能自行更改?,.net,windows,iis,application-pool,.net-framework-version,.net,Windows,Iis,Application Pool,.net Framework Version,问题说明了一切 我在Win2003服务器上有一个QA站点和PROD站点,带有IIS 6。我将这些站点移动到了一个新服务器,Win2008R2和IIS7。在新服务器上,我将两个新站点的应用程序池设置为2.0。在更新DNS以指向新服务器之前,我对这些站点进行了大量测试,这些站点运行良好。因此,我向我的客户发送了一封电子邮件,让他们知道他们可以更新DNS以指向新服务器 当我回到家时,我开始收到通知说网站关闭了。经过一些调查,我发现应用程序池的.NET版本在两个网站上都改为4.0。这导致网站瘫痪。客户端

问题说明了一切

我在Win2003服务器上有一个QA站点和PROD站点,带有IIS 6。我将这些站点移动到了一个新服务器,Win2008R2和IIS7。在新服务器上,我将两个新站点的应用程序池设置为2.0。在更新DNS以指向新服务器之前,我对这些站点进行了大量测试,这些站点运行良好。因此,我向我的客户发送了一封电子邮件,让他们知道他们可以更新DNS以指向新服务器

当我回到家时,我开始收到通知说网站关闭了。经过一些调查,我发现应用程序池的.NET版本在两个网站上都改为4.0。这导致网站瘫痪。客户端无权访问服务器。我的其他开发人员都没有改变它。我自己没改。它似乎已经自行改变了


应用程序池的.NET版本是否可能自行更改?

回答您的问题。不,这是不可能改变的


我还想问,为什么你的应用程序不能在NET 4.0上运行,因为它与NET 2.0向后兼容。

我不熟悉将应用程序/站点部署到IIS,所以请耐心等待

这个问题让我想起了微软的斯科特·汉斯曼(Scott Hanselman)的一篇博客文章:

在本文中,Scott解释了所用程序集版本号的差异。在生产站点的行为与开发版本不同之前,他并不知道这一点。这篇文章可能会帮助您更深入地挖掘原因

本文还提到了一个名为(链接到NuGet页面)的工具。例如,MVCDDiagnostics将允许您获取有关环境、路径和版本信息的大量信息

在Scott的案例中,他发现
System.Web.Mvc.DLL
的本地版本比他服务器上的版本更新,并且从GAC运行,而不是在本地运行


也许这可以为您的考试提供一个起点。

它本身不应该更改,但是,可能有人进入并无意中将其更改为服务器上的默认设置

Set-ItemProperty IIS:\AppPools\managedRuntimeVersion v4.0

我曾经遇到过这种情况,但从未找到原因,将其更新为4一切正常,客户满意

是IIS7,但我记不起任何其他细节。在不同windows平台上处理了数百个针对不同IIS版本的站点部署后,我非常惊讶这个设置“似乎”会自动更改。
我并不反对其他人更改它的可能性,但似乎不太可能,我的项目、我的站点、我的部署以前都工作过,很少有其他用户更改相关服务器上的任何设置

我知道这是一个旧线程,但我们最近有一个服务器,在应用windows更新后,所有.net 4.0应用程序池都更改为.net 2.0。我发现一个线程声称,当重置服务器时,应用程序池可以更改为DefaultAppPool设置为的任何版本。在我们的服务器上,DefaultAppPool设置为2.0,因此我相信这是可能的。

克里斯,谢谢你的回复。该应用程序是基于.NET2.0构建的。我不知道.NET4.0是那样向后兼容的。另外,我刚刚注意到这个服务器上有更多的站点关闭了。这些不是生产站点,所以我没有收到任何关于它们的警报,但它们已关闭。我现在注意到,此IIS 7服务器中的每个应用程序池都已切换到4.0。你知道如果没有人手动操作怎么会发生吗?克里斯,让我澄清一下。我知道.NET4.0向后兼容.NET2.0。是的,我的应用程序应该在.NET4.0中运行,但是,我至少必须在VisualStudio中打开它,将.NET版本更改为4.0,重新构建,希望一切都能顺利编译。因为我正忙着把这些网站迁移过来,所以我现在没有时间这么做。通常情况下,重建甚至是不必要的。。。它应该运行。除非你有混合的dll(包含非托管代码的dll),谢谢你的链接。我会查出来的。谢谢你的回复。我开始认为服务器已重新启动,当IIS再次启动时,所有应用程序池都设置为IIS默认的.NET 4.0。这可能吗?不可能,更可能是其他人去更改了某个网站,错误地更改了很多。abatishchev,谢谢你的回复。这是一个必须手动运行的脚本,对吗?或者,可能是在一个预定的任务或其他什么。。。正确的?据我所知,我的团队中没有人在服务器上运行过这样的脚本。@Barbosa:您可以手动运行,也可以从任何类型的服务器端代码运行。这解决了我的问题。我仍然不知道是什么导致defaultapppool更改为2.0。这导致其他应用程序池也更改为2.0。将其更改为4.0解决了此问题
Set-ItemProperty IIS:\AppPools\<pool_name> managedRuntimeVersion v4.0