.NET Framework十年回顧 體積越小功能越強(qiáng)
在Visual Studio 2010正式發(fā)布后,.NET平臺(tái)也差不多走過了十多年的時(shí)間。這十幾年.NET Framework的發(fā)展是怎樣的一個(gè)過程,本文將為您揭示.NET Framework十年發(fā)展路。51CTO向您推薦《Visual Studio進(jìn)化史》專題配合您了解這篇文章。
自2000年6月22日微軟向全球宣布自己的.NET戰(zhàn)略,到現(xiàn)在已經(jīng)十年多了。作為.NET戰(zhàn)略的基礎(chǔ),Microsoft .NET Framework 也已經(jīng)發(fā)行了多個(gè)版本。下面,我們就來看看這些年來微軟到底發(fā)布了哪些 .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 操作系統(tǒng)中已經(jīng)內(nèi)置了 .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 |
各個(gè) .NET Framework 版本之間的關(guān)系如下圖:
幾個(gè)重要的 .NET Framework 安裝程序的大小如下:
可以看出,.NET Framework 3.5 SP1 安裝程序特別大,而 .NET Framework 4.0 RTM 安裝程序反而變小了很多,不知 Microsoft 使用了什么技術(shù),在增加功能的基礎(chǔ)上還大大減少了安裝程序的大小。
我們來看看以下 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 文件來編譯(請(qǐng)參見: 淺談 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 進(jìn)行編譯(所需的 RuntimeFamework.cs 請(qǐng)參見 .NET Framework CLR 版本檢測):
- E:\CS\ClrInfo> nmake ClrInfo20.exe
- Microsoft (R) 程序維護(hù)實(shí)用工具 9.00.30729.01 版
- 版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
- 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 版
- 版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
- E:\CS\ClrInfo> nmake ClrInfo35.exe
- Microsoft (R) 程序維護(hù)實(shí)用工具 9.00.30729.01 版
- 版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
- 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 版
- 版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
- E:\CS\ClrInfo> nmake ClrInfo40.exe
- Microsoft (R) 程序維護(hù)實(shí)用工具 9.00.30729.01 版
- 版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
- 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 操作系統(tǒng):
運(yùn)行 ClrInfo35.exe,結(jié)果如下所示:
運(yùn)行 ClrInfo40.exe,結(jié)果如下所示:
好吧,讓我們安裝 Microsoft .NET Framework 2.0 SP2 吧。
然后運(yùn)行 ClrInfo20.exe,結(jié)果如下所示:
- 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
運(yùn)行 ClrInfo35.exe,結(jié)果如下所示:
- 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. 系統(tǒng)找不到指定的文件。
- 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].
運(yùn)行 ClrInfo40.exe,還是報(bào)“.NET Framework Initialization Error”錯(cuò)誤。
使用 Sun VirtualBox 的快照恢復(fù)功能將 Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2 操作系統(tǒng)恢復(fù)到全新安裝的狀態(tài)。
然后安裝 Microsoft .NET Framework 4.0 RTM。
其中的 Microsoft .NET Framework 4 Client Profile 也可以單獨(dú)安裝的,這樣安裝包(41.0MB)會(huì)小一些,但是有些擴(kuò)展功能就不能用了。
運(yùn)行 ClrInfo40.exe,結(jié)果如下所示:
- 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
運(yùn)行 ClrInfo35.exe,結(jié)果如下所示:
這就是說,舊版本的 .NET 程序不能運(yùn)行在新版本的 CLR 4.0 上面。
還有就是,安裝了 .NET Framework 4.0 后,只能報(bào)告“Unable to find a version of the runtime to run this application”,而不能象以前一樣明確指出是需要 CLR 2.0.50727。
實(shí)際上,在 CLR 4.0 上也是可以運(yùn)行 ClrInfo35.exe 程序的,只需要在同一目錄下放一個(gè)以下內(nèi)容的 ClrInfo35.exe.config 文件就行了:
- <configuration>
- <startup>
- <supportedRuntime version="v4.0"/>
- </startup>
- </configuration>
其運(yùn)行結(jié)果和 ClrInfo40.exe 的一樣。
現(xiàn)在我們接著安裝 Microsoft .NET Framework 3.5 SP1。
可見,安裝 .NET Framework 3.5 SP1 時(shí),會(huì)自動(dòng)安裝 .NET Framework 2.0 SP2 和 .NET Framework 3.0 SP2。
然后再運(yùn)行 ClrInfo35.exe (先刪除 ClrInfo35.exe.config),結(jié)果如下:
- 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 的版本號(hào)。
總結(jié)一下:
◆.NET Framework 1.0 (CLR 1.0) 和 1.1 (CLR 1.1) 已經(jīng)過時(shí),強(qiáng)烈建議不要使用。
◆.NET Framework 2.0 (CLR 2.0) 是目前廣泛使用的版本,提供了大部分的基礎(chǔ)功能。
◆.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) 重新實(shí)現(xiàn)并改進(jìn)了以前版本 .NET Framework 的功能,并且增加了 Parallel LINQ、Task Parallel Library 等新功能,強(qiáng)烈建議使用。舊版本的 .NET 程序可以通過配置 <supportedRuntime> 元素在 CLR 4.0 運(yùn)行。
原文標(biāo)題:Microsoft .NET Framework 以及 CLR 的版本
鏈接:http://www.cnblogs.com/skyivben/archive/2010/04/17/1714460.html
【編輯推薦】
- 淺談.NET Framework中的Stream.Read方法
- 淺析.NET Framework中XML數(shù)據(jù)處理
- .net framework3.5新特性2:新增匿名類
- 微軟公布下一代Visual Studio和.NET Framework平臺(tái)
- 配置Visual Studio 2008來調(diào)試.NET Framework源碼的基本步驟