我有一个可执行文件,我想知道需要启动此文件的Microsoft.NET Framework版本.

有没有简单的方法可以在什么地方找到这个信息?

(到目前为止,我try 了ILDASMDUMPBIN,但没有任何运气.)

推荐答案

我认为你能得到的最可靠的信息就是确定需要什么版本的CLR.您可以通过使用ILDASM并查看"MANIFEST" node 或Reflector并将"Application.exe" node 的dissemble视图视为IL来完成此操作.在这两种情况下,都有一个指示CLR版本的注释.在ILDASM中,注释是"//METADATA VERSION",而在Reflector中,注释是"Target Runtime Version".

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

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查看" list " node 数据:

.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,查看列出的每个引用的不均匀(仍为IL):

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

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

.net相关问答推荐

使用.NET 8时无法识别运行标识符

Azure Function应用程序-如何升级.NET运行时

获取Ef-Core集合的DeleteBehavior

NETSDK1083:无法识别指定的 RuntimeIdentifierwin10-x64

在 .NET 7 项目上设置 Sentry 时遇到问题

使用 PostAsJsonAsync C# 时出现错误请求

如何规范机器之间连字符的排序顺序?

将 Moq 模拟对象传递给构造函数

在生产中使用实体框架(代码优先)迁移

通用枚举到int的C#非装箱转换?

实体框架无法加载指定的元数据资源

什么是 project.lock.json?

隐式与显式接口实现

如何授予所有用户对我的应用程序创建的文件的完全权限?

如何异步 Files.ReadAllLines 并等待结果?

绑定到不在列表中的值的可编辑组合框

如何判断对象是否已在 C# 中释放

使用没有catch块的try-finally块

记录器包装器最佳实践

在 WPF 中设置 Tab 键顺序