我认为你能得到的最可靠的信息就是确定需要什么版本的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%可靠的,但我认为它不会很快改变.