我们计划将 .NET 4 与我们的一项 Web 服务一起使用,因为它可以更好地处理 ThreadPool。
这让我想到,如果我将运行虚拟目录的 ASP.NET 版本更改为 4.0,我什至不必使用 .NET 4 重新编译我的库,因为 IIS 将使用 .NET CLR 4 生成新的 w3process,而我的所有库都将是装在里面。
这意味着它将在我的 .NET 2 库中使用新的 ThreadPool。有些东西听起来不太对劲?
有些东西听起来不正确?
不,是对的。当您将虚拟目录配置为使用 ASP.NET 4 时,即使所有程序集都已针对 .NET 2.0 编译,应用程序也将使用 CLR 4.0 运行。
更新:
要验证这一点,您可以创建以下Test.aspx
页面:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Threading" %>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%= typeof(ThreadPool).Assembly.FullName %>
</body>
</html>
现在编译 ASP.NET 应用程序以 .NET 2.0 为目标,并将其托管到 IIS 6.0 中配置为使用 ASP.NET 4.0 版本的虚拟目录中。当您导航到Test.aspx
以下输出时,将生成:
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
然后将虚拟目录 ASP.NET 版本交换回 2.0 并生成以下内容:
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
因此,我们可以看到,只需更改虚拟目录中的目标框架版本,我们就可以在 CLR 4.0 中运行应用程序。