过去,并非每个.NET的新版本都会有一个新版本的CLR。我知道.NET 1.0、1.1、2.0和4.0有,但是.NET 3.0和3.5没有。
.NET 4.5会引入一个新的CLR吗?如何判断是否有新的CLR?
.NET 4.5有一个全新的CLR版本,您可以在此网页上阅读有关改进的详细信息:
需要澄清的是,这是一个新版本的CLR,实际上替代了4.0版本,因此称其为更新还是全新的CLR存有争议。
要确定正在使用的CLR版本,请使用:
System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion()
4.0.30319.269
到4.0.30319.17379
。因此,CLR是新的,但它与.NET 4.0 CLR向后兼容。您不需要重新编译任何为.NET v4.0编写和编译的代码。.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;
}
.NET 4和.NET 4.5(包括4.5.1和4.5.2)都是基于CLR版本4.0的。
更多详情请参见:https://msdn.microsoft.com/zh-cn/library/8bs2ecf4(v=vs.110).aspx
Scott Hanselman在他的博客上发表了一篇关于这个问题的文章。你可以在这里找到相关信息:
http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx
简而言之,CLR 有更新,提高了性能并添加了新的库。 .NET 4.5 使用的 CLR 与 .NET 4 兼容。 它被认为是一个次要更新。 这些次要更新是微软所谓的就地更新。.NET Framework 4.5 就像是 .NET Framework 4 的服务包,带有一些额外的功能。
4.0.30319
。如果你需要所有四个组件,即major.minor.build.revision,请使用**System.Environment.Version
**属性。修订号随着热修复和框架的新版本而更改。 - Jeppe Stig Nielsen