.net runtime 2.0而不是最新版本?

时间:2012-05-15 03:45:28

标签: .net exception frameworks runtime clr

在我的计算机上,我安装了.NET Framework 2.0,然后安装了.NET Fratmeworkt 3.0。然而,最近我从一个程序说“事件1000,.NET运行时2.0错误报告”得到一个例外。我想知道,为什么这个程序仍然使用.NET Runtime 2.0而不是新版本。我如何检查特定程序使用的.NET Runtime版本?有可能改变吗?

3 个答案:

答案 0 :(得分:3)

“.NET运行时”实际上意味着“公共语言运行时”(CLR),它已经是.NET framework 2.0,3.0和3.5的2.0版本。只有使用.NET 4.0,CLR版本也增加到4.0(有很多问题在SO上关于这个双版本的混淆,一个很好的概述见answer)。所以你看到的信息可能会令人困惑,但仍然是正确的。

如果您尚未安装.NET 4.0,则.NET运行时2.0是您计算机上唯一存在的版本。

您可能想知道应用程序是否实际编译/构建针对.NET framework 3.0(3.5)而不是.NET framework 2.0。

要获取此信息,您需要查看应用程序集的元数据,即存储对其他程序集的引用的位置,包括.NET框架本身的引用 - 以及其他程序集的版本。

要查看此信息,您可以使用Reflector,或.NET Framework SDK(或Visual Studio)附带的ILDASM.EXE

例如,在您选择的二进制文件(可执行文件或DLL)上使用ILDASM.EXE,然后打开“MANIFEST”节点。你会看到这样的条目:

.assembly extern System.Windows.Forms
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}

在这种情况下,这是从.NET 4.0应用程序中获取的,仅引用System.Windows.Forms.dll,但我认为你可以了解它。

通过在应用程序的配置文件中指定<supportedRuntime>元素,您可以(部分)影响应用程序使用的运行时版本。有关此内容的更多讨论,请参阅this Stack Overflow question中的others

答案 1 :(得分:2)

这完全取决于所讨论的应用程序针对哪个版本的.NET进行编译。开发人员选择目标框架。据我所知,最终用户无法更改部署后使用的库版本。如果应用程序的目标是2.0,即使安装了4.0,它也将始终在2.0版本的lib上运行。

答案 2 :(得分:1)

运行时是关键字。运行时只有4个不同的版本:1.0,1.1,2.0和4.0。您仍在使用CLR版本2.0.50727和抖动。 mscorlib.dll和其他核心.NET框架程序集仍然是2.0.0.0

当您安装.NET 3.0时,您肯定会添加更多好东西,这是一组支持WCF,WPF和Linq以及新版C#编译器的新程序集。足以保证版本号增加,即使它们不需要新版本的运行时。

下一版本的.NET 4.5将会发生同样的事情。运行时版本保持不变,4.0.30319