为什么 IIS 加载的 .NET 运行时版本与应用程序池设置的版本不同?

为什么 IIS 加载的 .NET 运行时版本与应用程序池设置的版本不同?

IIS 中的网站设置为使用设置为使用 .NET Framework 版本 4.0 的应用程序池。此网站无法加载使用 4.0 编译的 DLL。此网站上的页面输出框架版本 (系统.环境.版本)报告2.0已加载。

为什么这个网站要加载 2.0 框架?如何配置才能加载 4.0 框架?

应用程序池已回收。
此机器上的其他网站正在加载并运行 4.0 框架。

答案1

根据微软的说法:

“应用程序所运行的 .NET Framework 版本按如下方式确定:

“如果计算机上存在构建该应用程序的 .NET Framework 版本,则该应用程序将在该版本上运行。”

该网站是否针对.NET 2.0 进行编译?

要验证目标框架版本和 CLR 版本,您可以使用实用程序 corflags.exe。对于程序集所在的 bin 文件夹,运行以下命令:

for %i in (*.exe,*.dll) do corflags.exe %i  

它将显示程序集所针对的 .NET Framework 版本等信息。请注意,您也可以使用 corflags.exe 修改程序集的 PE 标头以针对 .NET 4.0 CLR 版本,但最好在 Visual Studio 中针对 .NET 4.0 重新编译。

如何:使用应用程序配置文件确定 .NET Framework 版本
http://msdn.microsoft.com/en-us/library/9w519wzk.aspx

app.config 中的 supportsRuntime 元素
http://msdn.microsoft.com/en-us/library/w4atty68.aspx

https://stackoverflow.com/questions/2961600/app-config-supportedruntime

Corflags 信息:
https://blogs.msdn.com/b/gauravseth/archive/2006/03/07/545104.aspx
http://msdn.microsoft.com/en-us/library/ms164699%28v=vs.80%29.aspx

答案2

您是否已经检查过下<compilation>的指令?<system.web>web.config

答案3

简而言之,它不是那样工作的。将设置应用程序池版本视为设置默认环境如果没有人要求其他东西。如果应用程序池中有 2 个应用程序,其中 1 个使用 2.0,而 1 个使用 4.0,则取决于谁先被调用,以及在该应用程序池中运行的框架版本。管理员可以“修复”此问题(您可能不应该这样做,因为该应用程序可能针对 2.0)的方法是设置 application.config 文件中的supportedruntime(它在运行时下),请参阅<supportedRuntime> 元素

相关内容