如何找出哪个版本的.NET Framework可执行文件需要运行?

我有一个可执行文件,我想知道这个文件需要启动的.NET框架的哪些版本。

有一个简单的方法来找到这个信息吗?

(到目前为止我试过ILDASMDUMPBIN没有任何运气。)

我认为最近你可以得到的是确定什么版本的CLR是必需的。你可以使用ILDASM并查看“MANIFEST”节点或反射器,并将“Application.exe”节点的反汇编视图看作IL。在这两种情况下都有一个注释指示CLR版本。在ILDASM中,注释是“//元数据版本”,在反射器中注释是“目标运行时版本”。

下面是一个名为WindowsFormsApplication1.exe的.NET WinForms应用程序的示例:

ILDASM:

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern System
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}

反射器:

.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727

您还可以查看引用的程序集列表,并查找具有最高版本号的引用。

再次,使用ILDASM查看“MANIFEST”节点数据:

.assembly extern System.Drawing
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
  .ver 2:0:0:0
}
.assembly extern System.Core
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 3:5:0:0
}

并使用反射器,看到dissambly(仍然为IL)为列出的每个参考:

.assembly extern System.Core
{
    .ver 3:5:0:0
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}

通过查找具有最高版本元数据的引用,您可以确定引用来自哪个版本的Framework,这将表明您需要为应用程序安装的相同版本的Framework来运行。话虽这么说,我不会把这100%可靠,但我不认为它会改变任何时间很快。

http://stackoverflow.com/questions/325918/how-to-find-out-which-version-of-the-net-framework-an-executable-needs-to-run

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何找出哪个版本的.NET Framework可执行文件需要运行?