2

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

4

3 回答 3

3

“.NET 运行时”实际上是指“公共语言运行时”(CLR),它已经是 .NET 框架 2.0、3.0 和 3.5 的 2.0 版。只有在 .NET 4.0 中,CLR 版本也增加到了 4.0(有很多问题是关于 SO 上的双版本控制的混淆,对于一个很好的概述,请参见这个答案)。因此,您看到的消息可能令人困惑,但仍然是正确的。

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

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

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

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

例如,ILDASM.EXE在您选择的二进制文件(可执行文件或 DLL)上使用,然后打开“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>通过在应用程序的配置文件中指定元素,您可以(部分)影响应用程序使用的运行时版本。有关这方面的更多讨论,请参阅此 Stack Overflow问题等。

于 2012-05-15T04:32:03.583 回答
2

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

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

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

于 2012-05-15T04:47:28.193 回答
2

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

于 2012-05-15T03:50:44.973 回答