2012-07-18 84 views
1

有没有一种快速的方法来测试一个给定的dll是否包含只能使用.net 4.5运行的代码,而实际上并未尝试通过任何CLR加载它?如何检查一个DLL是否依赖.net 4.5?

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

我想确保我没有,不小心把事情搞砸了,这会导致我的DLL引用一些.net 4.5只有类/名称空间。

回答

1

这是从来没有可能的,除非有一个主要的CLR版本更改。从.NET 1.0到1.1,1.1到2.0和3.5到4.0的工作。中间版本没有CLR版本更改,也没有一个从4.0到4.5

这引起了WaitHandle.WaitOne(int)方法的一个非常臭名昭着的问题,这是一个重载.NET 2.0 SP1版本的mscorlib。没有相应的改变[AssemblyVersion],仍然是2.0.0.0。所以程序员不知不觉地使用了过载,并将代码炸弹放在没有安装服务包的机器上。

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

与.NET 4到4.5相同的东西。当你使用4.0引用程序集时,你可以确定你不会意外地使用4.5特定的类或方法。实际上,使用4.5增加的功能需要使用4.5引用程序集进行编译。

0

使用.NET Reflector可以打开程序集/ dll并查看其目标运行时和平台目标。 ildasm.exe也可以为你做到这一点,但它看起来有点晦涩难懂。查找它的/ header选项。

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