.NET Framework十年回顾 体积越小功能越强
创始人
2024-06-28 11:10:54
0

在Visual Studio 2010正式发布后,.NET平台也差不多走过了十多年的时间。这十几年.NET Framework的发展是怎样的一个过程,本文将为您揭示.NET Framework十年发展路。51CTO向您推荐《Visual Studio进化史》专题配合您了解这篇文章。

自2000年6月22日微软向全球宣布自己的.NET战略,到现在已经十年多了。作为.NET战略的基础,Microsoft .NET Framework 也已经发行了多个版本。下面,我们就来看看这些年来微软到底发布了哪些 .NET Framework 版本。

  1. Framework  CLR and Assemblies          Release  
  2. ----------------------------------------------------------  
  3. 1.0 RTM    1.0.3705.0                  Released with VS.NET (aka VS.NET 2002)  
  4. 1.0 SP1    1.0.3705.209  
  5. 1.0 SP2    1.0.3705.288  
  6. 1.0 SP3    1.0.3705.6018  
  7.  
  8. 1.1 RTM    1.1.4322.573                Released with VS.NET 2003  
  9. 1.1 SP1    1.1.4322.2032  
  10. 1.1 SP1    1.1.4322.2300              (Windows Server 2003 32-bit version)  
  11.  
  12. 2.0 RTM    2.0.50727.42                Released with VS2005 RTM  
  13. 2.0 SP1    2.0.50727.1433              Released with VS2008 RTM and .Net 3.5 RTM  
  14. 2.0 SP2    2.0.50727.3053              Released with VS2008 SP1 and .Net 3.5 SP1  
  15.  
  16. Framework  CLR           New assemblies  
  17. ----------------------------------------------------------  
  18. 3.0 RTM    2.0 RTM       3.0.4506.30   Only "out-of-band" non-SP framework release  
  19. 3.0 SP1    2.0 SP1       3.0.4506.648  Released with VS2008 RTM and .Net 3.5 RTM  
  20. 3.0 SP2    2.0 SP2       3.0.4506.2152  Released with VS2008 SP1 and .Net 3.5 SP1  
  21.  
  22. 3.5 RTM    2.0 SP1       3.5.21022.8    Released with VS2008 RTM and .Net 3.5 RTM  
  23. 3.5 SP1    2.0 SP2       3.5.30729.1    Released with VS2008 SP1  
  24.  
  25. Framework  CLR and Assemblies            Release  
  26. ----------------------------------------------------------  
  27. 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 版本之间的关系如下图:

The .NET Framework Stack

几个重要的 .NET Framework 安装程序的大小如下:

Version File Date & Time    Bytes      MB          File Name
------- ---------------- ----------- ----- ---------------------------
2.0 SP2 2008/07/30 09:54  25,001,480  23.8 NetFx20SP2_x86.exe
3.5 SP1 2008/07/30 16:22 242,743,296 231.5 dotnetfx35setup.exe
4.0 RTM 2010/03/19 09:44  50,449,456  48.1 dotNetFx40_Full_x86_x64.exe
WIC     2009/11/23 20:24   1,226,536   1.2 wic_x86_chs.exe

可以看出,.NET Framework 3.5 SP1 安装程序特别大,而 .NET Framework 4.0 RTM 安装程序反而变小了很多,不知 Microsoft 使用了什么技术,在增加功能的基础上还大大减少了安装程序的大小。

我们来看看以下 ClrInfo.cs 吧:

  1. using System;  
  2. using System.Text;  
  3.  
  4. namespace Skyiv  
  5. {  
  6.   public class ClrInfo  
  7.   {  
  8.     static void Main()  
  9.     {  
  10.       Console.WriteLine("      OS Version: {0}", Environment.OSVersion);  
  11.       Console.WriteLine("     CLR Version: {0}  ( {1} )", Environment.Version, RuntimeFramework.CurrentFramework);  
  12.       Console.WriteLine("Default Encoding: {0}", Encoding.Default);  
  13.       Console.WriteLine();  
  14.       Console.WriteLine(typeof(string).AssemblyQualifiedName);  
  15. #if !NetFx20  
  16.       Console.WriteLine(typeof(System.IO.Packaging.Package).AssemblyQualifiedName);  
  17.       Console.WriteLine(typeof(System.TimeZoneInfo).AssemblyQualifiedName);  
  18. #endif  
  19.       Console.WriteLine();  
  20.       Console.WriteLine("Available Frameworks:");  
  21.       foreach (var frame in RuntimeFramework.AvailableFrameworks) Console.WriteLine("  " + frame);  
  22.     }  
  23.   }  

使用以下 makefile 文件来编译(请参见: 浅谈 make 工具):

  1. CLR35 = C:\Windows\Microsoft.NET\Framework\v3.5  
  2. CLR40 = C:\Windows\Microsoft.NET\Framework\v4.0.30319  
  3. CSC35 = $(CLR35)\csc.exe  
  4. CSC40 = $(CLR40)\csc.exe  
  5. SRC1 = ClrInfo.cs RuntimeFramework.cs  
  6.  
  7. ClrInfo20.exe: $(SRC1)  
  8.     $(CSC35) -out:$@ $(SRC1) -D:NetFx20  
  9.  
  10. ClrInfo35.exe: $(SRC1)  
  11.     $(CSC35) -out:$@ $(SRC1) -r:WindowsBase.dll  
  12.  
  13. ClrInfo40.exe: $(SRC1)  
  14.     $(CSC40) -out:$@ $(SRC1) -r:$(CLR40)\WPF\WindowsBase.dll 

使用 nmake.exe 进行编译(所需的 RuntimeFamework.cs 请参见 .NET Framework CLR 版本检测):

 

  1. E:\CS\ClrInfo> nmake ClrInfo20.exe  
  2. Microsoft (R) 程序维护实用工具 9.00.30729.01 版  
  3. 版权所有(C) Microsoft Corporation。保留所有权利。  
  4.  
  5. C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe -out:ClrInfo20.exe ClrInfo.cs RuntimeFramework.cs -D:NetFx20  
  6. 适用于 Microsoft(R) .NET Framework 3.5 版的 Microsoft(R) Visual C# 2008 编译器 3.5.30729.1 版  
  7. 版权所有(C) Microsoft Corporation。保留所有权利。  
  8.  
  9. E:\CS\ClrInfo> nmake ClrInfo35.exe  
  10. Microsoft (R) 程序维护实用工具 9.00.30729.01 版  
  11. 版权所有(C) Microsoft Corporation。保留所有权利。  
  12.  
  13. C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe -out:ClrInfo35.exe ClrInfo.cs RuntimeFramework.cs -r:WindowsBase.dll  
  14. 适用于 Microsoft(R) .NET Framework 3.5 版的 Microsoft(R) Visual C# 2008 编译器 3.5.30729.1 版  
  15. 版权所有(C) Microsoft Corporation。保留所有权利。  
  16.  
  17. E:\CS\ClrInfo> nmake ClrInfo40.exe  
  18. Microsoft (R) 程序维护实用工具 9.00.30729.01 版  
  19. 版权所有(C) Microsoft Corporation。保留所有权利。  
  20.  
  21. C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe -out:ClrInfo40.exe ClrInfo.cs RuntimeFramework.cs  
  22.  -r:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dll  
  23. Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1  
  24. Copyright (C) Microsoft Corporation. All rights reserved.  
  25.  
  26. E:\CS\ClrInfo> dir *.exe  
  27. 2010/04/17  19:59             7,168 ClrInfo20.exe  
  28. 2010/04/17  19:59             7,168 ClrInfo35.exe  
  29. 2010/04/17  19:59             7,680 ClrInfo40.exe 

使用 Sun VirtualBox 全新安装 Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2 操作系统:

Windows Server 2003 R2 

.NET CLR 1.1.4322

运行 ClrInfo35.exe,结果如下所示:

ClrInfo35 on CLR 1.1

运行 ClrInfo40.exe,结果如下所示:

ClrInfo40 on CLR 1.1

 

好吧,让我们安装 Microsoft .NET Framework 2.0 SP2 吧。

.NET CLR 2.0.50727

然后运行 ClrInfo20.exe,结果如下所示:

  1. D:\CS\ClrInfo> ClrInfo20  
  2.       OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2  
  3.      CLR Version: 2.0.50727.3053  ( Net 2.0.50727.3053 )  
  4. Default Encoding: System.Text.DBCSCodePageEncoding  
  5.  
  6. System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
  7.  
  8. Available Frameworks:  
  9.   Net 1.1.4322  
  10.   Net 2.0.50727 

运行 ClrInfo35.exe,结果如下所示:

  1. D:\CS\ClrInfo> ClrInfo35  
  2.  
  3. Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly  
  4.  'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or  
  5.  one of its dependencies. 系统找不到指定的文件。  
  6. File name: 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 
  7.    at Skyiv.ClrInfo.Main()  
  8.  
  9. WRN: Assembly binding logging is turned OFF.  
  10. To enable assembly bind failure logging, set the registry value  
  11.  [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.  
  12. Note: There is some performance penalty associated with assembly bind failure logging.  
  13. 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 操作系统恢复到全新安装的状态。

VirtualBox Restore

然后安装 Microsoft .NET Framework 4.0 RTM。

.NET CLR 4.0

.NET CLR 4.0

其中的 Microsoft .NET Framework 4 Client Profile 也可以单独安装的,这样安装包(41.0MB)会小一些,但是有些扩展功能就不能用了。

运行 ClrInfo40.exe,结果如下所示:

  1. D:\CS\ClrInfo> ClrInfo40  
  2.       OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2  
  3.      CLR Version: 4.0.30319.1  ( Net 4.0.30319.1 )  
  4. Default Encoding: System.Text.DBCSCodePageEncoding  
  5.  
  6. System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
  7. System.IO.Packaging.Package, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
  8. System.TimeZoneInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
  9.  
  10. Available Frameworks:  
  11.   Net 1.1.4322  
  12.   Net 4.0.30319 

运行 ClrInfo35.exe,结果如下所示:

ClrInfo35

这就是说,旧版本的 .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 文件就行了:

  1.    
  2.    
  3.    
  4.    
  5.   

其运行结果和 ClrInfo40.exe 的一样。

现在我们接着安装 Microsoft .NET Framework 3.5 SP1。

.NET CLR 3.5 SP1 

.NET CLR 3.5 SP1

可见,安装 .NET Framework 3.5 SP1 时,会自动安装 .NET Framework 2.0 SP2 和 .NET Framework 3.0 SP2。

然后再运行 ClrInfo35.exe (先删除 ClrInfo35.exe.config),结果如下:

  1. D:\CS\ClrInfo> clrinfo35  
  2.       OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2  
  3.      CLR Version: 2.0.50727.3053  ( Net 2.0.50727.3053 )  
  4. Default Encoding: System.Text.DBCSCodePageEncoding  
  5.  
  6. System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
  7. System.IO.Packaging.Package, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
  8. System.TimeZoneInfo, System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
  9.  
  10. Available Frameworks:  
  11.   Net 1.1.4322  
  12.   Net 2.0.50727  
  13.   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 程序可以通过配置 元素在 CLR 4.0 运行。

原文标题:Microsoft .NET Framework 以及 CLR 的版本

链接:http://www.cnblogs.com/skyivben/archive/2010/04/17/1714460.html

【编辑推荐】

  1. 浅谈.NET Framework中的Stream.Read方法
  2. 浅析.NET Framework中XML数据处理
  3. .net framework3.5新特性2:新增匿名类
  4. 微软公布下一代Visual Studio和.NET Framework平台
  5. 配置Visual Studio 2008来调试.NET Framework源码的基本步骤

 

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...