2010-12-15 253 views
9

可能重复:
Determine framework (CLR) version of assembly如何检查DLL文件编译的.NET Framework版本?

我这是在.NET Framework编译库/ DLL文件。

现在(没有任何编码)我想检查用于编译这个库的.NET Framework版本 。我需要知道它是2.0,3.5还是4.0。 有什么工具可以帮助我实现这个目标吗? (我知道它应该在Framework的4.0版本下编译,但我需要100%确定使用了Framework 4.0的版本)。

+0

链接的答案是不是一个真正的比赛。 CLR版本!=框架版本。 @truth:你的问题可能会被关闭,转发并指出dup不能回答你的问题。 – 2010-12-15 14:13:45

+0

@Hans:你为什么要转发?只需编辑问题或评论即可。如果错误关闭,它会重新打开。 – Cascabel 2010-12-15 15:24:43

回答

13

您必须使用ILDASM。您双击清单,你会得到

//元数据版本:V2.0.50727

//元数据版本:v4.0.30319

框架3.0和3.5都算不上新版本的CLR,所以你会继续拥有V2.0。至多,您可以通过查看依赖关系来猜测您将需要哪个框架。某些dll仅在3.5版本中可用,但如果您手动将它们复制到2.0版PC中,该应用程序将可以正常工作。 检查C:\ windows \ Microsoft.NEt \ Framework,你会在他们的相应文件夹中找到它们。

希望这有助于

4

使用ILDASMReflector检查程序集清单并查看引用的System。*程序集版本。

例如,使用ILDASM查看.NET程序集的清单,我可以看到,这是建立目标框架1.1

// Metadata version: v1.1.4322 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern System.Web 
{ 
    .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A)       // .?_....: 
    .ver 1:0:5000:0 
} 
.assembly extern System 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern ICSharpCode.SharpZipLib 
{ 
    .publickeytoken = (1B 03 E6 AC F1 16 4F 73)       // ......Os 
    .ver 0:84:0:0 
} 
.assembly ReverseProxy 
{ 

    // --- The following custom attribute is added automatically, do not uncomment ------- 
    // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, 
    //                    bool) = (01 00 00 01 00 00) 

    .hash algorithm 0x00008004 
    .ver 0:0:0:0 
} 
.module ReverseProxy.dll 
// MVID: {3F1B8B81-1B8F-4DD7-A71F-FD019C095F25} 
.imagebase 0x00400000 
.file alignment 0x00000200 
.stackreserve 0x00100000 
.subsystem 0x0003  // WINDOWS_CUI 
.corflags 0x00000001 // ILONLY 
// Image base: 0x010A0000 
+1

您应该看看TargetFrameworkAttribute--不是在系统库 – Lu55 2013-09-02 12:45:34

+0

@ Lu55的特定版本中,请记住,TargetFrameworkAttribute仅在Framework 4.0中引入 – 2013-09-07 00:45:51

1

我会用Reflection

Assembly a = Assembly.ReflectionOnlyLoadFrom("C:\\library.dll"); 
Console.WriteLine(a.ImageRuntimeVersion); 

但是,我是一名程序员。我不知道如何确定这些类型的东西“没有任何编码”。

+1

尽管这是一个糟糕的答案,但对于单独的最后一行的upvote这个答案。 :) – Arafangion 2013-06-03 04:04:37

9

如果你有它作为项目的参考。您应该能够查看该引用的属性下的Runtime版本。无需编码= - )

alt text