如何检查dll是否依赖于.net 4.5?

时间:2012-07-18 07:50:53

标签: .net-4.0 .net-4.5

是否有一种快速方法可以测试给定的dll是否包含只能使用.net 4.5运行的代码,而不会实际尝试通过任何CLR加载它?

背景:我有一个DLL,我正在编译到4.0目标,但使用.net 4.5(vs 2012)工具集。我的运行环境没有安装4.5。我使用AsyncTargetingPack编写异步代码,并将代码定位到.net 4.0。

我想确保我没有意外地搞砸了一些会导致我的DLL引用某些.net 4.5的类/命名空间。

2 个答案:

答案 0 :(得分:1)

除非主要的CLR版本发生变化,否则这是不可能的。其中从.NET 1.0到1.1,1.1到2.0和3.5到4.0。中间版本没有CLR版本更改,也没有从4.0到4.5

这引起了WaitHandle.WaitOne(int)方法的一个相当臭名昭着的问题,这是一个添加到mscorlib的.NET 2.0 SP1版本的重载。如果没有相应的更改[AssemblyVersion],仍然是2.0.0.0。因此,程序员不知不觉地使用了过载并将代码炸弹放在没有安装Service Pack的机器上。

Microsoft在.NET 4中修复了该问题,引用程序集不再是运行时程序集的副本。它们只包含元数据,没有IL。转而允许他们更改公共类而不用担心他们会破坏任何内容,参考程序集也没有更新。已经发布了很多针对.NET 4的更新,从未听说过发生过事故。

.NET 4到4.5也是如此。当您使用4.0参考程序集时,您可以确定不会意外使用4.5特定的类或方法。实际上,使用4.5添加的功能需要使用4.5参考程序集进行编译。

答案 1 :(得分:0)

使用.NET Reflector,您可以打开程序集/ dll并查看其目标运行时和平台目标。 ildasm.exe也可以为你做这个,但它看起来更加模糊。查找其/标题选项。

ildasm.exe可以从Visual Studio命令提示符运行。