C# 如何在API中获取被调用方法的列表

C# 如何在API中获取被调用方法的列表,c#,api,static-analysis,C#,Api,Static Analysis,简言之:我需要获得数据库API的方法列表,这些方法实际上是在我们的代码库中调用和使用的 更长: 我们有一个相当大的代码库,它基于一个(丑陋的)数据库API。后者有很多接口和相当大的功能集,我们根本不需要,我们想摆脱它。重写的第一个原型应该与现有的API代码兼容一百个——因此应该实现它的接口,以便于根据我们的生产代码构建它 为了定义我们使用的方法的子集,我可以使用dotCover或其他方法进行覆盖率分析,并运行单元测试,但我非常确定这只能产生80%到90%的成功率。我需要的更像是对代码的静态分析。

简言之:我需要获得数据库API的方法列表,这些方法实际上是在我们的代码库中调用和使用的

更长: 我们有一个相当大的代码库,它基于一个(丑陋的)数据库API。后者有很多接口和相当大的功能集,我们根本不需要,我们想摆脱它。重写的第一个原型应该与现有的API代码兼容一百个——因此应该实现它的接口,以便于根据我们的生产代码构建它

为了定义我们使用的方法的子集,我可以使用dotCover或其他方法进行覆盖率分析,并运行单元测试,但我非常确定这只能产生80%到90%的成功率。我需要的更像是对代码的静态分析。另一种方法可以是api的动态包装器,它记录每个方法调用,以便在使用后进行适当的覆盖率分析

我很好奇这样的分析是否可以用一个工具来完成,或者我是否应该包装API来获得所需的信息(手动/自动?它真的很大,有成百上千种方法)


我可以完全访问所有源代码,但它们分布在许多模块中,有自己的解决方案。

正如Chris所指出的,NDepend可以为您提供一个API方法/字段/类型列表,这些API方法/字段/类型称为。免责声明:我是该工具的开发者之一

下面的屏幕截图显示,在NUnit代码库中,只有程序集
NUnit.uiexepion
(行/列#6)和
NUnit.core.interfaces
(行/列#18)使用方法
List.ToArray()

我们称之为第三方代码(您称之为API)的代码以蓝色字体显示。仅显示实际使用的API方法/字段/类型。例如,在屏幕截图中,未显示类
HashSet
,因为NUNit代码库未使用该类

NDepend的所有特性都考虑了第三方代码,但我在这里公开了依赖结构矩阵,因为它肯定是最适合获取API中调用方法列表的特性。该工具将进行为期14天的全功能试用

让我们注意,当您比较代码库的两个不同快照时,NDepend也可以显示。在下面的屏幕截图中,我们可以看到NUnit v2.5.8使用的第三方方法,而NUnit v2.5.3没有使用这些方法


我想看看各种IL-weaver实现中的任何一种,这些实现用于在.NET上创建面向方面编程(AOP)层-PostSharp是一个很容易让人想到的实现:

如果我是你,我会创建一个“类似于记录器”的方面,然后将该方面编织到你想要编目使用的所有方法中。然后,用它的配速跑一会儿。您应该能够通过这种方式收集一组良好的使用数据,这将有助于确定您可以安全地删除哪些数据


与任何数量的静态分析工具相比,这种方法的一个好处是它还捕获任何方法的“动态”或元调用,而不仅仅是编译时间限制的调用

不确定是不是100%重复。然而,你可能会回顾一下它的缺点是获取Resharper。我认为,它是100%相反的:)Resharper对我没有帮助(除了在每个方法上单击“查找用法”)好吧,我不熟悉Resharper(我自己不喜欢它)。另一个选项是NDepend(),这正是我所需要的,谢谢您的快速介绍。我们甚至有NDepend的许可证:)是否有将矩阵导出为.pdf或打印的选项?这是一个很长的列表,.png导出没有多大帮助。到目前为止,矩阵只能导入到png。但是您仍然可以在ThirdParty中编写类似于from m的代码查询。