C# - 使用反射比较两个.net dll

时间:2011-07-11 10:07:58

标签: c# reflection

我想比较位于不同位置的两个相同的.net dll。因此,我使用System.Reflection.Assembly.LoadFile(filename)而不是System.Reflection.Assembly.LoadFrom(filename)加载dll。但是要比较的.Net dll引用了其他程序集(与相应的dll位于同一文件夹中)。使用LoadFile(filename)然后GetTypes()加载dll会引发ReflectionTypeLoadException。我应该如何使用反射加载两个相同的dll以获得它们的类型和&比较?

3 个答案:

答案 0 :(得分:2)

使用ReflectionOnlyLoad ot ReflectionOnlyLoadFrom方法

您还需要处理ReflectionOnlyAssemblyResolve以告诉框架在哪里找到依赖项。

答案 1 :(得分:1)

您可以捕获ReflectionTypeLoadException以查看正确加载的类型列表。有关详细信息,请参阅以下链接:

如果您知道可以找到丢失的程序集的位置,您还可以处理AppDomain.AssemblyResolve事件,以“帮助”查找和加载所需的依赖项。

答案 2 :(得分:1)

如果您只想比较两个程序集,则当然不需要加载它们。我建议采用更加静态的方法,基于Mono.Cecil

它允许您以简单的方式比较模块,类型和方法 - 甚至在指令级别。

可以在此处找到入门文档:

https://github.com/jbevain/cecil/wiki/HOWTO