如何检查编译DLL文件的.NET Framework版本?

时间:2010-12-15 11:41:52

标签: .net dll assemblies version libraries

  

可能重复:
  Determine framework (CLR) version of assembly

我有一个在.NET Framework中编译的库/ DLL文件。

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

4 个答案:

答案 0 :(得分:13)

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

//元数据版本:v2.0.50727

//元数据版本:v4.0.30319

Framework 3.0和3.5并不是CLR的新版本,因此您将继续使用V2.0。最多,您可以通过填充依赖项来猜测您将需要哪个框架。有些dll只能在3.5中使用,但是如果你手动将它们复制到只有2.0的PC中,应用程序就可以运行。 检查C:\ windows \ Microsoft.NEt \ Framework,您将在相应的文件夹中找到它们。

希望这有帮助

答案 1 :(得分:9)

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

alt text

答案 2 :(得分:4)

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

例如,使用ILDASM查看.NET程序集的清单,我可以看到这是针对Framework 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

答案 3 :(得分:1)

我会使用Reflection

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

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