自2000年6月22日微软向全球宣布自己的.NET战略,到现在已经十年多了。作为.NET战略的基础,Microsoft .NET Framework 也已经发行了多个版本。下面,我们就来看看这些年来微软到底发布了哪些 .NET Framework 版本。
自2000年6月22日微软向全球宣布自己的.NET战略,到现在已经十年多了。作为.NET战略的基础,Microsoft .NET Framework 也已经发行了多个版本。下面,我们就来看看这些年来微软到底发布了哪些 .NET Framework 版本。
注意,没有 CLR 3.0 和 CLR 3.5。
有些 Windows 操作系统中已经内置了 .NET Framework,如下所示:
Version |
Version Number |
Release Date |
Visual Studio |
Default in Windows |
1.0 |
1.0.3705.0 |
2002-02-13 |
Visual Studio .NET |
|
1.1 |
1.1.4322.573 |
2003-04-24 |
Visual Studio .NET 2003 |
Windows Server 2003 |
2.0 |
2.0.50727.42 |
2005-11-07 |
Visual Studio 2005 |
|
3.0 |
3.0.4506.30 |
2006-11-06 |
|
Windows Vista, Windows Server 2008 |
3.5 |
3.5.21022.8 |
2007-11-19 |
Visual Studio 2008 |
Windows 7, Windows Server 2008 R2 |
4.0 |
4.0.30319.1 |
2010-04-12 |
Visual Studio 2010 |
|
各个 .NET Framework 版本之间的关系如下图:
几个重要的 .NET Framework 安装程序的大小如下:
可以看出,.NET Framework 3.5 SP1 安装程序特别大,而 .NET Framework 4.0 RTM 安装程序反而变小了很多,不知 Microsoft 使用了什么技术,在增加功能的基础上还大大减少了安装程序的大小。
我们来看看以下 ClrInfo.cs 吧:
using System;
using System.Text;
namespace Skyiv
{
public class ClrInfo
{
static void Main()
{
Console.WriteLine(" OS Version: {0}", Environment.OSVersion);
Console.WriteLine(" CLR Version: {0} ( {1} )", Environment.Version, RuntimeFramework.CurrentFramework);
Console.WriteLine("Default Encoding: {0}", Encoding.Default);
Console.WriteLine();
Console.WriteLine(typeof(string).AssemblyQualifiedName);
#if !NetFx20
Console.WriteLine(typeof(System.IO.Packaging.Package).AssemblyQualifiedName);
Console.WriteLine(typeof(System.TimeZoneInfo).AssemblyQualifiedName);
#endif
Console.WriteLine();
Console.WriteLine("Available Frameworks:");
foreach (var frame in RuntimeFramework.AvailableFrameworks) Console.WriteLine(" " + frame);
}
}
}
使用以下 makefile 文件来编译(请参见: 浅谈 make 工具):
使用 nmake.exe 进行编译(所需的 RuntimeFamework.cs 请参见 .NET Framework CLR 版本检测):
使用 Sun VirtualBox 全新安装 Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2 操作系统:
运行 ClrInfo35.exe,结果如下所示:
运行 ClrInfo40.exe,结果如下所示:
好吧,让我们安装 Microsoft .NET Framework 2.0 SP2 吧。
然后运行 ClrInfo20.exe,结果如下所示:
运行 ClrInfo35.exe,结果如下所示:
运行 ClrInfo40.exe,还是报“.NET Framework Initialization Error”错误。
使用 Sun VirtualBox 的快照恢复功能将 Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2 操作系统恢复到全新安装的状态。
然后安装 Microsoft .NET Framework 4.0 RTM。
其中的 Microsoft .NET Framework 4 Client Profile 也可以单独安装的,这样安装包(41.0MB)会小一些,但是有些扩展功能就不能用了。
运行 ClrInfo40.exe,结果如下所示:
运行 ClrInfo35.exe,结果如下所示:
这就是说,旧版本的 .NET 程序不能运行在新版本的 CLR 4.0 上面。
还有就是,安装了 .NET Framework 4.0 后,只能报告“Unable to find a version of the runtime to run this application”,而不能象以前一样明确指出是需要 CLR 2.0.50727。
实际上,在 CLR 4.0 上也是可以运行 ClrInfo35.exe 程序的,只需要在同一目录下放一个以下内容的 ClrInfo35.exe.config 文件就行了:
<configuration>
<startup>
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
其运行结果和 ClrInfo40.exe 的一样。
现在我们接着安装 Microsoft .NET Framework 3.5 SP1。
可见,安装 .NET Framework 3.5 SP1 时,会自动安装 .NET Framework 2.0 SP2 和 .NET Framework 3.0 SP2。
然后再运行 ClrInfo35.exe (先删除 ClrInfo35.exe.config),结果如下:
注意 System.String、System.IO.Packaging.Package 和 System.TimeZoneInfo 的版本号。
总结一下:
- .NET Framework 1.0 (CLR 1.0) 和 1.1 (CLR 1.1) 已经过时,强烈建议不要使用。
- .NET Framework 2.0 (CLR 2.0) 是目前广泛使用的版本,提供了大部分的基础功能。
- .NET Framework 3.0 (CLR 2.0) 增加了 WPF、WCF、WF 和 Card Space 等功能。
- .NET Framework 3.5 (CLR 2.0) 增加了 LINQ、ADO.NET Entity Framework 等功能。
- .NET Framework 4.0 (CRL 4.0) 重新实现并改进了以前版本 .NET Framework 的功能,并且增加了 Parallel LINQ、Task Parallel Library 等新功能,强烈建议使用。旧版本的 .NET 程序可以通过配置 <supportedRuntime> 元素在 CLR 4.0 运行。
本文中提到的程序可以到 http://bitbucket.org/ben.skyiv/clrinfo/downloads/ 页面下载。
也可以使用 hg clone http://bitbucket.org/ben.skyiv/clrinfo/ 命令下载。
关于 hg ,请参阅 Mercurial 备忘录。
参考资料
- .NET Framework
- Microsoft .NET Framework 的版本
- How do the .NET Framework, CLR and Visual Studio version numbers relate to each other?
- .NET 4.0 无法直接运行 .NET 2.0 程序的问题
- .NET Framework 常规参考: <supportedRuntime>元素