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

发布于 2024-10-07 21:29:55 字数 366 浏览 7 评论 0原文

可能的重复:
确定程序集的框架 (CLR) 版本

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

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

Possible Duplicate:
Determine framework (CLR) version of assembly

I have a library/DLL file which is compiled in the .NET Framework.

Now (without any coding) I would like to check the .NET Framework version
which was used to compile this library. I need to know was it 2.0, 3.5, or 4.0.
Is there any tool that help me to achieve this?
(I know that it should be compiled under version 4.0 of the Framework, but I need to be 100% sure that version 4.0 of the Framework was used).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

傲娇萝莉攻 2024-10-14 21:29:55

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

希望这有帮助

You must use ILDASM. you double click the manifest and you get

// Metadata version: v2.0.50727

or

// Metadata version: v4.0.30319

Framework 3.0 and 3.5 are not really new releases of the CLR, so you will keep having V2.0. At most, you can guess which framework you will need by cheching the dependencies. Some dlls are available only in 3.5, but if you manually copy them in a 2.0 only PC the app will work.
Check C:\windows\Microsoft.NEt\Framework and you will find them in their according folder.

Hope this helps

梦屿孤独相伴 2024-10-14 21:29:55

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

alt text

If you have it as a reference in a project. You should be able to look at the Runtime version under properties for that reference. No coding required =-)

alt text

千纸鹤带着心事 2024-10-14 21:29:55

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

Use ILDASM or Reflector to inspect the assembly manifest and see the version of the System.* assemblies that where referenced.

For example, using ILDASM to view the manifest of a .NET assembly I can see that this was built targeting 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
隱形的亼 2024-10-14 21:29:55

我会使用 Reflection

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

但是,我'我是一名程序员。我不知道如何“无需任何编码”来确定这些类型的事物。

I would use Reflection:

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

But, I'm a programmer. I don't know how to determine these types of things "without any coding".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文