• Microsoft .NET Framework 以及 CLR 的版本


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

    .NET Framework & CLR Version
    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 安装程序的大小如下:

    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 吧:

    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 操作系统:

    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,结果如下所示:

    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 操作系统恢复到全新安装的状态。

    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,结果如下所示:

    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,结果如下所示:

    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 文件就行了:

     <configuration>  

       
    <startup>  

         
    <supportedRuntime version="v4.0"/>  

       
    </startup>  

     
    </configuration> 

    其运行结果和 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),结果如下:

    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 运行。

    转自:http://www.cnblogs.com/skyivben/archive/2010/04/17/1714460.html

    其他学习:

    .NET Framework 4.0安装备忘录

  • 相关阅读:
    【转载】【贪心】各种覆盖问题
    【转载】【知识点总结】NOIP前夕 2014.11.4
    最大子图形问题
    小知识
    Tyvj——P1864 [Poetize I]守卫者的挑战
    Tyvj——P1952 Easy
    BZOJ——2134: 单选错位
    BZOJ——1620: [Usaco2008 Nov]Time Management 时间管理
    BZOJ——1622: [Usaco2008 Open]Word Power 名字的能量
    洛谷 U3357 C2-走楼梯
  • 原文地址:https://www.cnblogs.com/xiaopin/p/1913055.html
Copyright © 2020-2023  润新知