如何查看以编程方式在 .NET 程序集中调用了哪些方法

本文关键字:调用 集中 方法 程序集 程序 何查看 编程 方式 NET | 更新日期: 2023-09-27 18:36:57

长话短说,我正在使用一个框架,如果我调用某些 LINQ 方法,它将抛出 ExecutionEngineExceptions。 与使用 Reflection 查看程序集中定义了哪些类型的方式类似,我希望能够查看程序集中实际调用了哪些方法。

我知道有独立的工具可以做到这一点,但我想轻松地将此检查作为签入过程的一部分运行,如果找到其中任何一个,则构建过程失败。

如何查看以编程方式在 .NET 程序集中调用了哪些方法

可以使用调试 API 或分析 API(非托管)来检查运行时发生的情况。这是探查器通常执行的操作。反射 API 无法提供运行时信息。

更一般地说,调用的内容取决于程序状态,并且在运行之前(即在构建期间)您无权访问它,以便能够知道实际调用的内容,您需要运行整个东西,为它提供您通常给它的所有输入,然后您可能能够找到调用的内容。当然,如果你提供不同的输入,调用的内容也可能不同。

我在上一段中使用了广义的"输入"。例如,时钟的当前值也可以被视为输入(当然,如果软件以任何形状或形式使用它)

更新根据您的说明,可以使用 GetMethodBody 方法来检查方法主体并找出它们可能调用的内容。

您可能还会发现此问题和答案很有用。

如果我正确理解你的问题...

您有一个第三方 Linq 提供程序,并且该 Linq 提供程序不支持您可以使用 Linq 语法表达的所有内容,如果不支持 Linq 语句,它将引发运行时错误...这是对的吗?

如果是这样,那么在编译/构建时很难识别不受支持的 Linq 语句,通过静态分析,您需要解析代码来识别它。

当然还有一种不同的方法,那就是使用单元测试,编写执行代码的单元测试,并从构建服务器运行测试,如果测试失败,则构建失败。您还可以使用代码覆盖率工具来确定测试覆盖了多少代码,您也可以在类级别执行此操作。