我已经有了一个可执行的文件,我想知道哪个版本的.净框架,这一文件需要开始。

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

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

有帮助吗?

解决方案

我觉得你可以可靠地得到最接近的是要确定的是什么版本的 CLR 是必需的。您可以使用ILDASM来看,在“清单”节点或反思,并在看“Application.exe”节点作为IL的dissasembly视图做到这一点。在这两种情况下,有一个评论,表示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在看“清单”节点数据:

.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)
}

通过找到具有最高版本的元数据的参考,你可以决定什么是从参考,这将表明你需要安装运行应用程序框架的相同版本附带的框架的版本。话虽这么说,我不会把它当作100%可靠的,但我不认为它会很快改变。

其他提示

使用 记事本, 三十年的历史,200kb在大小,预先安装的工具:

  • 打开应用程序 notepad appname.exe,
  • 搜索词"框架",
  • 重复最后的搜索 F3 直到 .NET Framework,version=vX.Y 显示出来
  • 如果没有什么发现(下文版本3.0)搜索 v2. ...仍然100倍那么容易安装千兆字节点网络分析仪工具和垃圾的工作室。

任何其他编辑/观众可以开放的二进制文件也一样的记事本++或totalCommander是伟大的文本/hex观众 利斯特.

有一个更简单的方法是使用 dotPeek 和看树显示的内容。

请参阅属性面板: “在这里输入的图像描述”

现在可以使用 ILSpy 来检查一个组件的所述目标框架。加载程序集后,单击装配节点的根,你可以找到TargetFramework声明下的信息:

[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]

从代码可以使用 Assembly.ImageRuntimeVersion 但是,通过查看文件可能做的最好的事情就是使用反射镜,看看哪个版本的 mscorlib 是被引用。

编辑: 甚至更好的是使用 ildasm, 打开你会的,然后查看清单的组件。第一线的清单会告诉你的 确切的 版本的CLR,大会建。

您可以使用一个名为CorFlags.exe工具。它已经出现自.NET 2.0的,我肯定知道它是包含在Windows SDK 7.0。默认情况下(在Windows XP专业版),它被安装到C:\ Program Files文件\微软的SDK \的Windows \ v7.0A \ BIN \ CorFlags.exe。与文件路径的管理模块(没有任何其他命令行标志)来显示其报头信息,其中包括的版本提供。

请将此实用的设计修改模块的PE32头,所以直到你读的文档仔细

从命令行:find "Framework" MyApp.exe

或者,你可以发现它具有System.Core程序的参考。这会告诉你,这个程序是使用.NET Framework版本。对于2.0 System.Core程序的版本将2.0.xxx.xxx。 3.5版本将是3.5.xxx.xxx等

在Linux / OSX / UNIX可以使用:

strings that_app.exe | grep 'v2.\|Framework'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top