【问题标题】:How do I check the version of the .NET Framework that a DLL file was compiled against? [duplicate]如何检查编译 DLL 文件的 .NET Framework 版本? [复制]
【发布时间】:2010-12-15 11:41:52
【问题描述】:

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

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

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

【问题讨论】:

  • 链接的答案不是真正的匹配。 CLR 版本!= 框架版本。 @truth:您的问题可能会被关闭,重新发布并指出 dup 没有回答您的问题。
  • @Hans:你为什么要转发?只需编辑问题或评论以指出这一点。如果错误关闭,它将重新打开。

标签: .net dll assemblies version libraries


【解决方案1】:

您必须使用 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,您会在相应的文件夹中找到它们。

希望对你有帮助

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用 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
      

      【讨论】:

      • 您应该查看 TargetFrameworkAttribute - 而不是系统库的特定版本
      • @Lu55,请记住 TargetFrameworkAttribute 仅在 Framework 4.0 中引入
      【解决方案4】:

      我会使用Reflection:

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

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

      【讨论】:

      • 很想只为最后一行投票这个答案,尽管这是一个糟糕的答案。 :)
      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2011-03-28
      • 2010-10-15
      • 2010-09-21
      • 2013-10-06
      • 2020-08-15
      • 2014-11-24
      • 1970-01-01
      相关资源
      最近更新 更多