在Visual Studio 2010正式发布后,.NET平台也差不多走过了十多年的时间。这十几年.NET Framework的发展是怎样的一个过程,本文将为您揭示.NET Framework十年发展路。51CTO向您推荐《Visual Studio进化史》专题配合您了解这篇文章。
自2000年6月22日微软向全球宣布自己的.NET战略,到现在已经十年多了。作为.NET战略的基础,Microsoft .NET Framework 也已经发行了多个版本。下面,我们就来看看这些年来微软到底发布了哪些 .NET Framework 版本。
- Framework CLR and Assemblies Release
- ----------------------------------------------------------
- 1.0 RTM 1.0.3705.0 Released with VS.NET (aka VS.NET 2002)
- 1.0 SP1 1.0.3705.209
- 1.0 SP2 1.0.3705.288
- 1.0 SP3 1.0.3705.6018
- 1.1 RTM 1.1.4322.573 Released with VS.NET 2003
- 1.1 SP1 1.1.4322.2032
- 1.1 SP1 1.1.4322.2300 (Windows Server 2003 32-bit version)
- 2.0 RTM 2.0.50727.42 Released with VS2005 RTM
- 2.0 SP1 2.0.50727.1433 Released with VS2008 RTM and .Net 3.5 RTM
- 2.0 SP2 2.0.50727.3053 Released with VS2008 SP1 and .Net 3.5 SP1
- Framework CLR New assemblies
- ----------------------------------------------------------
- 3.0 RTM 2.0 RTM 3.0.4506.30 Only "out-of-band" non-SP framework release
- 3.0 SP1 2.0 SP1 3.0.4506.648 Released with VS2008 RTM and .Net 3.5 RTM
- 3.0 SP2 2.0 SP2 3.0.4506.2152 Released with VS2008 SP1 and .Net 3.5 SP1
- 3.5 RTM 2.0 SP1 3.5.21022.8 Released with VS2008 RTM and .Net 3.5 RTM
- 3.5 SP1 2.0 SP2 3.5.30729.1 Released with VS2008 SP1
- Framework CLR and Assemblies Release
- ----------------------------------------------------------
- 4.0 RTM 4.0.30319.1 Released with VS2010
注意,没有 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 工具):
- CLR35 = C:\Windows\Microsoft.NET\Framework\v3.5
- CLR40 = C:\Windows\Microsoft.NET\Framework\v4.0.30319
- CSC35 = $(CLR35)\csc.exe
- CSC40 = $(CLR40)\csc.exe
- SRC1 = ClrInfo.cs RuntimeFramework.cs
- ClrInfo20.exe: $(SRC1)
- $(CSC35) -out:$@ $(SRC1) -D:NetFx20
- ClrInfo35.exe: $(SRC1)
- $(CSC35) -out:$@ $(SRC1) -r:WindowsBase.dll
- ClrInfo40.exe: $(SRC1)
- $(CSC40) -out:$@ $(SRC1) -r:$(CLR40)\WPF\WindowsBase.dll
使用 nmake.exe 进行编译(所需的 RuntimeFamework.cs 请参见 .NET Framework CLR 版本检测):
- E:\CS\ClrInfo> nmake ClrInfo20.exe
- Microsoft (R) 程序维护实用工具 9.00.30729.01 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe -out:ClrInfo20.exe ClrInfo.cs RuntimeFramework.cs -D:NetFx20
- 适用于 Microsoft(R) .NET Framework 3.5 版的 Microsoft(R) Visual C# 2008 编译器 3.5.30729.1 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- E:\CS\ClrInfo> nmake ClrInfo35.exe
- Microsoft (R) 程序维护实用工具 9.00.30729.01 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe -out:ClrInfo35.exe ClrInfo.cs RuntimeFramework.cs -r:WindowsBase.dll
- 适用于 Microsoft(R) .NET Framework 3.5 版的 Microsoft(R) Visual C# 2008 编译器 3.5.30729.1 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- E:\CS\ClrInfo> nmake ClrInfo40.exe
- Microsoft (R) 程序维护实用工具 9.00.30729.01 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe -out:ClrInfo40.exe ClrInfo.cs RuntimeFramework.cs
- -r:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dll
- Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
- Copyright (C) Microsoft Corporation. All rights reserved.
- E:\CS\ClrInfo> dir *.exe
- 2010/04/17 19:59 7,168 ClrInfo20.exe
- 2010/04/17 19:59 7,168 ClrInfo35.exe
- 2010/04/17 19:59 7,680 ClrInfo40.exe
使用 Sun VirtualBox 全新安装 Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2 操作系统:
运行 ClrInfo35.exe,结果如下所示:
运行 ClrInfo40.exe,结果如下所示:
好吧,让我们安装 Microsoft .NET Framework 2.0 SP2 吧。
然后运行 ClrInfo20.exe,结果如下所示:
- D:\CS\ClrInfo> ClrInfo20
- OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2
- CLR Version: 2.0.50727.3053 ( Net 2.0.50727.3053 )
- Default Encoding: System.Text.DBCSCodePageEncoding
- System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Available Frameworks:
- Net 1.1.4322
- Net 2.0.50727
运行 ClrInfo35.exe,结果如下所示:
- D:\CS\ClrInfo> ClrInfo35
- Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly
- 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or
- one of its dependencies. 系统找不到指定的文件。
- File name: 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
- at Skyiv.ClrInfo.Main()
- WRN: Assembly binding logging is turned OFF.
- To enable assembly bind failure logging, set the registry value
- [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
- Note: There is some performance penalty associated with assembly bind failure logging.
- To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
运行 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,结果如下所示:
- D:\CS\ClrInfo> ClrInfo40
- OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2
- CLR Version: 4.0.30319.1 ( Net 4.0.30319.1 )
- Default Encoding: System.Text.DBCSCodePageEncoding
- System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.IO.Packaging.Package, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
- System.TimeZoneInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Available Frameworks:
- Net 1.1.4322
- Net 4.0.30319
运行 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),结果如下:
- D:\CS\ClrInfo> clrinfo35
- OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2
- CLR Version: 2.0.50727.3053 ( Net 2.0.50727.3053 )
- Default Encoding: System.Text.DBCSCodePageEncoding
- System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.IO.Packaging.Package, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
- System.TimeZoneInfo, System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Available Frameworks:
- Net 1.1.4322
- Net 2.0.50727
- Net 4.0.30319
注意 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 运行。
原文标题:Microsoft .NET Framework 以及 CLR 的版本
链接:http://www.cnblogs.com/skyivben/archive/2010/04/17/1714460.html
【编辑推荐】
- 浅谈.NET Framework中的Stream.Read方法
- 浅析.NET Framework中XML数据处理
- .net framework3.5新特性2:新增匿名类
- 微软公布下一代Visual Studio和.NET Framework平台
- 配置Visual Studio 2008来调试.NET Framework源码的基本步骤