.NET 4.5会引入新版本的CLR吗?

Mic*_*out 30 .net clr .net-4.5

过去并非每个新版本的.NET都带有新版本的CLR.我知道.NET 1.0,1.1,2.0和4.0,但.NET 3.0和3.5没有.

.NET 4.5会引入新的CLR吗?如何判断是否有新的CLR?

Joa*_*son 28

是的,.NET 4.5有一个品牌打击CLR的新版本,你可以阅读有关改进的内容;

http://blogs.microsoft.co.il/blogs/sasha/archive/2011/09/17/improvements-in-the-clr-core-in-net-framework-4-5.aspx

澄清; 这是CLR的新版本,它实际上取代了4.0版本,因此无论是将其称为更新还是新的CLR都是有争议的.

要告诉您正在运行的CLR版本,请使用

System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion()
Run Code Online (Sandbox Code Playgroud)

  • "新"是什么意思?从某种意义上说,CLR的每一次变化都可以被视为"新的CLR".但是,.NET 4.5肯定不是并排版本.它将取代.NET 4.0.从那个意义上说,汉斯帕森特的回答是正确的. (3认同)
  • 您引用的方法仅提供三个第一个组件major.minor.build.对于.NET 4,.NET 4.5和.NET 4.5.1,它总是为"4.0.30319".如果你需要所有四个组件major.minor.build.revision,请使用**`System.Environment.Version`**属性.修订版号随修补程序和框架的新版本而更改. (2认同)

Han*_*ant 17

不,它仍然是版本4.0.30319.clr.dll和朋友的新版本将替换您计算机上的现有版本.与.NET 3.0,3.5和3.5SP1中使用的方案相同.检查是否安装了4.5需要与这些版本相同的方法,您检查注册表.


Aar*_*sen 14

是.CLR版本更改4.0.30319.2694.0.30319.17379.因此,CLR是新的,但它与.NET 4.0 CLR向后兼容.您不需要重新编译由.NET v4.0编写和编译的任何代码.

从MSDN上的.NET Framework版本和依赖项页面:

.NET Framework 4.5 RC是一个就地更新,它取代了计算机上的.NET Framework 4.安装此更新后,.NET Framework 4应用程序应继续运行而无需重新编译.但是,.NET Framework中的某些更改可能需要更改您的应用程序代码.

此外,从.NET Framework博客:

.NET Framework 4.5是一个替换.NET Framework 4的就地更新(而不是并行安装).我们的目标是使.NET 4.5完全向后兼容为.NET 4构建的应用程序

有些更改向后兼容.请参阅 MSDN上的.NET Framework 4.5 RC页面中的应用程序兼容性.

Microsoft的官方指导和良好的编码实践不是检测CLR的特定版本.相反,您应该检测是否存在某些功能.代替

public static bool IsDotNet45()
{
    return Environment.Version.Major == 4 &&
           Environment.Version.Revision > 17000;
}
Run Code Online (Sandbox Code Playgroud)

做类似的事情:

public static bool SupportsReflectionContext()
{
    // Class "ReflectionContext" exists from .NET 4.5 onwards.
    return Type.GetType("System.Reflection.ReflectionContext", false) != null;
}
Run Code Online (Sandbox Code Playgroud)