我有一个简单的问题:当我在Visual Studio 2012中转到HELP-> About时,窗口显示我正在使用的.NET版本是4.5.50709.但是,当我执行以下代码时:
Console.WriteLine(Environment.Version);
Run Code Online (Sandbox Code Playgroud)
我得到版本4.0.30319.18034.是什么赋予了?在Troelsen的Pro C#5和.NET 4.5 Framework(第81页)中,它指出Version属性返回一个表示.NET平台版本的对象.这是不正确的?上一个问题的线程表明此属性返回CLR版本.如果是这种情况,Version对象的目的是什么(例如,知道CLR版本而不是框架版本的用途是什么),以及如何实际获得框架版本?
Dan*_*ker 17
CLR(公共语言运行时)版本是4.0.30319.18034.它从4.0.30319开始,因为.NET 4.5是.NET 4.0程序集的就地升级.
4.5更新完全取代了.NET 4.0运行时,并将实际版本号设置为v4.0.30319.
但是您的版本号可能代表.NET 4.5并带有一些更新,可能由用户Daniel 从此列表中推断出来:
以下是我见过的运行时版本的一些示例:
- 4.0.30319.1 = .NET 4.0 RTM
- 4.0.30319.269 =我们在从用户收集的数据中看到的最常见的.NET 4.0版本
- 4.0.30319.544 =我们的一小部分用户安装的另一个.NET 4.0版本
- 4.0.30319.17626 = .NET 4.5 RC
- 4.0.30319.17929 = .NET 4.5 RTM
- 4.0.30319.18010 =我的Windows 8计算机上的当前版本
主要版本,次要版本和构建版本号都没有改变,所以我认为他们认为.NET 4.0和4.5之间的区别对于大多数人来说都不够重要.期望某些版本4.0.30319的.NET 4.0应用程序仍然可以在.NET 4.5下按预期工作.
无论您是为.NET 4.0还是4.5编写代码,都要针对完全相同的.NET程序集进行编译.唯一的区别是,在编译.NET 4.0时,隐藏了 .NET 4.5中的一些新类(就好像它们从未存在过).所以说明.NET 4.0和4.5之间区别的唯一可靠方法似乎是Christian.K 在他的帖子中提出的相当黑客的方法,它不涉及版本号:
这个
ReflectionContext类似乎是.NET framework 4.5的全新功能,并且可以方便地存在mscorlib.所以你可以这样做.Run Code Online (Sandbox Code Playgroud)public static bool IsNet45OrNewer() { // Class "ReflectionContext" exists from .NET 4.5 onwards. return Type.GetType("System.Reflection.ReflectionContext", false) != null; }