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

31

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

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

7个回答

27

3
“'new'”的意思是什么?从某种意义上说,对CLR的任何更改都可以视为“新的CLR”。但是,.NET 4.5肯定不是并列发布。它将取代.NET 4.0。从这个意义上说,Hans Passant的答案是正确的。 - Steven
是的,我想你可以从两个角度看待它,4.5 需要一个升级的 CLR,如果你认为它是新的还是旧的,这是一个讨论的问题。 - Joachim Isaksson
@Steven:并不是很模糊。原帖作者清楚地理解了在.NET 3.0和3.5中发生的事情。这是一个重要的洞察,它将在4.5再次发生。 - Hans Passant
2
你引用的方法只提供前三个组件,即major.minor.build。对于.NET 4、.NET 4.5和.NET 4.5.1来说,这将始终是4.0.30319。如果你需要所有四个组件,即major.minor.build.revision,请使用**System.Environment.Version**属性。修订号随着热修复和框架的新版本而更改。 - Jeppe Stig Nielsen
1
http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx - 功能和IDE部分,这不是一个新的CLR! - Peter Kiss
显示剩余4条评论

17
不,它仍然是版本4.0.30319。clr.dll和其它相关文件的新修订版将替换您计算机上的现有文件。与.NET 3.0、3.5和3.5SP1使用的方案相同。检查是否安装了4.5需要与那些版本采用相同的方法,您需要检查注册表

“CLR”所在的文件位于哪里? - Michiel van Oosterhout
1
不。那个文件夹中的Clr.dll是CLR。你还会在那里找到clrjit.dll,那是即时编译器。 - Hans Passant

14
是的。CLR的版本更改4.0.30319.2694.0.30319.17379。因此,CLR是新的,但它与.NET 4.0 CLR向后兼容。您不需要重新编译任何为.NET v4.0编写和编译的代码。
从MSDN上的.NET Framework Versions and Dependencies页面:
“.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;
}

做类似这样的事情:

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

2
尽管我怀疑当问题提出时当前格式可能还不可用,但这里是MSDN上的CLR指南,其中显示了所有框架版本及其包含的CLR版本。我发现它非常有用,所以我想分享一下。
在.NET 4.5旁边,它声明包括CLR 4。

1

0

0

.NET Framework 4.5 就像是 .NET Framework 4 的服务包,带有一些额外的功能。


1
那似乎是一种稍微奇怪的描述方式。我猜在某些方面作为类比是正确的,但我不知道它是否真正回答了问题:是否有一个新的CLR。 - Andrew Barber
我认为这个评论没有问题。CLR 4.5实际上取代了CLR 4,因此应该被视为更新。 - Yogee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接