我有一个生成的文件,其中包含大约10000个公共静态属性和方法。我怀疑它们中有相当一部分是完全未使用的,但大约有50个程序集和数百万行代码需要检查。
我想做的是运行某种实用程序,它可以查看我们拥有的所有已编译的程序集,并告诉我该类的哪些成员正在被调用,并为每个成员提供计数。
通过反射,这样的事情可能发生吗?还是我需要恢复到实际的代码分析工具?是否有任何库可以分析程序集以在另一个程序集中查找其依赖项?
ReSharper"高级查找用法"功能可以在库和当前解决方案中查找引用。我还没有使用过这个特定的功能,所以我不确定它的效果如何(在解决方案中查找用法效果很好(,但你可以获得ReSharper的试用版并尝试它。我的猜测是,你需要从一个有引用你感兴趣的各种库的项目的解决方案中运行它。
我不认为这可以通过"常规"反射来实现,因为仅通过查看类的结构无法检测用法。我想您需要分解IL并对其进行分析,查找call
、calli
和callvirt
指令(属性查找也是方法调用(。使用typeof(SomeType).GetMethod("Method").GetMethodBody().GetILAsByteArray()
可以获得方法的IL,但当它是字节数组形式时,可能很难对其进行分析。您可能想了解Cecil,它可能会帮助您分析字节码。
当然,很可能已经有了这样的工具。