过去并非每个新版本的.NET都带有新版本的CLR。我知道.NET 1.0,1.1,2.0和4.0,但.NET 3.0和3.5没有。
.NET 4.5会引入新的CLR吗?如何判断是否有新的CLR?
答案 0 :(得分:28)
是的,.NET 4.5有一个品牌打击CLR的新版本,你可以阅读有关改进的内容;
澄清;这是CLR的新版本,实际上替换 4.0版本,因此无论是将其称为更新还是新的CLR都是有争议的。
要告诉您正在运行的CLR版本,请使用
System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion()
答案 1 :(得分:17)
不,它仍然是版本4.0.30319。 clr.dll和朋友的新版本将替换您计算机上的现有版本。与.NET 3.0,3.5和3.5SP1中使用的方案相同。检查是否安装了4.5需要与这些版本相同的方法,即check the registry。
答案 2 :(得分:14)
是。从4.0.30319.269
到4.0.30319.17379
的{{3}}。因此,CLR是新的,但它与.NET 4.0 CLR向后兼容。您不需要重新编译为.NET v4.0编写和编译的任何代码。
来自MSDN上的version of the CLR changes页:
.NET Framework 4.5 RC是一种就地更新,它取代了计算机上的.NET Framework 4。安装此更新后,.NET Framework 4应用程序应继续运行而无需重新编译。但是,.NET Framework中的某些更改可能需要更改您的应用程序代码。
此外,来自.NET Framework Versions and Dependencies:
.NET Framework 4.5是一个替换.NET Framework 4的就地更新(而不是并行安装)。我们的目标是使.NET 4.5完全向后兼容为.NET 4构建的应用程序
有些更改不向后兼容。请参阅MSDN上的 .NET Framework blog 页面。
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;
}
答案 3 :(得分:2)
虽然我怀疑在问题出现时它的当前格式是否可用,但这里是MSDN上的CLR Guide,它显示了所有的Framework版本和它们包含的CLR版本。我发现它非常有用,所以我想我会分享。
.NET 4.5 旁边,它声明它包含 CLR 4 。
答案 4 :(得分:1)
.NET 4和.NET 4.5(包括4.5.1和4.5.2)位于CLR版本4.0
上更多细节:https://msdn.microsoft.com/en-us/library/8bs2ecf4(v=vs.110).aspx
答案 5 :(得分:0)
.NET Framework 4.5就像.NET Framework 4的Service Pack,具有一些附加功能。
答案 6 :(得分:0)
Scott Hanselman在他的博客上发表了一篇关于这个问题的文章。你可以在这里找到它:
http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx
缺点是CLR有更新,可以提高性能并添加新库。 .NET 4.5使用的CLR与.NET 4兼容。它被认为是次要更新。这些次要更新是Microsoft称为就地更新的内容。