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

本文关键字:两个 dll net 比较 反射 反射比 | 更新日期: 2023-09-27 18:01:56

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

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

使用ReflectionOnlyLoad或ReflectionOnlyLoadFrom方法

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

您可以捕获ReflectionTypeLoadException,以便查看正确加载的类型列表。查看以下链接了解更多详细信息:

  • 如何获得。net中的类列表
  • 由getexporttedtypes抛出的MissingMethodException

如果你知道缺失的程序集可以在哪里找到,你也可以处理AppDomain.AssemblyResolve事件,以便"帮助"定位和加载所需的依赖项。

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

它允许你比较模块、类型、方法——甚至在指令级,以一种简单的方式。

可以在这里找到入门文档:

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