当前位置:  开发笔记 > 前端 > 正文

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

如何解决《如何找出需要运行哪个版本的.NETFramework可执行文件?》经验,为你挑选了7个好方法。

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

有没有一种简单的方法可以在某处找到这些信息?

(到目前为止,我没有运气就试过ILDASM和DUMPBIN.)



1> Scott Dorman..:

我认为你可以得到的最接近的是确定需要什么版本的CLR.您可以使用ILDASM并查看"MANIFEST"节点或Reflector并将"Application.exe"节点的dissasmbly视图视为IL来执行此操作.在这两种情况下都有一个注释表明CLR版本.在ILDASM中,注释为"//元数据版本",而在Reflector中,注释为"目标运行时版本".

以下是名为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
}

并使用Reflector,查看列出的每个引用的dissambly(仍为IL):

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

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


不幸的是,微软为上述技术引入了一个重大改变..NET 4.5程序集无法在原始.NET 4上运行,并且为了告诉.NET 4.5程序集,您还需要读取System.Runtime.Versioning.TargetFrameworkAttribute.http://www.lextm.com/2013/02/how-to-tell-net-45-only-assemblies.html

2> Asain Kujovi..:

使用记事本,三十年,200kb大小,预安装工具:

打开应用程序notepad appname.exe,

搜索"框架"一词,

重复上次搜索F3直到.NET Framework,version=vX.Y出现

如果没有找到(版本低于3.0)搜索v2....仍然容易100倍,然后安装千兆字节的点网分析工具和垃圾工作室.

任何其他编辑器/查看器也可以打开二进制文件,如Notepad ++或totalCommander的文本/十六进制查看器列表器.


在exe中找不到“框架”。

3> Daniel A. Wh..:

更简化的方法是使用dotPeek并查看树中显示的内容.

请参阅属性面板: 在此输入图像描述



4> 小智..:

您现在可以使用ILSpy来检查程序集的目标框架.加载程序集后,单击程序集节点的根,您可以在TargetFramework声明下找到信息:

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



5> Andrew Hare..:

从您可以使用的代码,Assembly.ImageRuntimeVersion但通过查看文件可能最好的事情是使用反射器,看看mscorlib正在引用的版本.

编辑: 更好的是使用ildasm,打开你的程序集,然后查看程序集的清单.清单的第一行将告诉您为程序集构建的CLR 的确切版本.


错了 OP询问的是.NET Framework的版本,而不是CLR运行时的版本。这个答案解决了后者。例如,我针对使用CLR运行时版本4.0.30139的Framework 4.7.2531.0运行。ImageRuntimeVersion返回CLR版本,而不是Framework版本。

6> Vince Fedorc..:

您可以使用名为CorFlags.exe的工具.它自.NET 2.0以来一直存在,我确信它包含在Windows SDK 7.0中.默认情况下(在Windows XP Pro上),它安装在C:\ Program Files\Microsoft SDKs\Windows\v7.0A\bin\CorFlags.exe中.为其提供托管模块的文件路径(不带任何其他命令行标志)以显示其标头信息,其中包括版本.

请记住,此实用程序旨在修改模块的PE32标头,因此在仔细阅读文档之前请不要使用任何标志.



7> Sean B..:

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

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有