通过reflection查找属性使用计数

我有一个生成的文件,大约有10,000个公共静态属性和方法。 我怀疑它们中的大部分是完全未使用的,但是大约有50个程序集和数百万行代码需要检查以确定。

我想要做的是运行某种实用程序,它可以查看我们拥有的所有已编译的程序集,并告诉我这个类的哪些成员正在被调用,并为每个成员提供计数。

这样的事情是否可以通过reflection,或者我是否需要恢复到实际的代码分析工具? 是否有任何库可以分析程序集以在另一个程序集中找到它们的依赖项?

ReSharper“Find Usages Advanced”function可以选择在库中以及当前的解决方案中查找引用。 我没有使用这个特殊的function,所以我不确定它的工作原理(解决方案中的查找用法非常好),但是你可以获得ReSharper的试用版并试用它。 我的猜测是你需要从一个具有项目的解决方案中运行它,该项目引用了你感兴趣的各种库。

我不认为这可以通过“常规”reflection来完成,因为通过仅查看类的结构无法检测到用法 。 我想你需要反汇编IL并分析它,寻找callcallicallvirt指令(属性查找也是方法调用)。 您可以使用typeof(SomeType).GetMethod("Method").GetMethodBody().GetILAsByteArray()获取IL的方法,但是当它以字节数组的forms分析时可能很难分析它。 您可能需要查看Cecil ,它可能会帮助您分析字节码。

当然,可能已经存在这方面的工具。