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

时间:2013-10-24 23:33:11

标签: c# reflection

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

我知道有一些独立的工具可以执行此操作,但我希望能够轻松地将此检查作为签入过程的一部分运行,如果发现任何这些检查过程,则会使构建过程失败。

2 个答案:

答案 0 :(得分:2)

您可以使用Debugging APIProfiling API(非托管)来检查运行时发生的情况。这是剖析器通常所做的事情。 Reflection API无法为您提供运行时信息。

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

我在上面的段落中广泛使用“输入”。例如,时钟的当前值也可以被视为输入(如果软件以任何形式或形式使用它)

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

您也可能会发现this question and answers有用。

答案 1 :(得分:0)

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

您有第三方Linq提供程序,Linq提供程序不支持您使用Linq语法表达的所有内容,如果不支持Linq语句,它将抛出运行时错误。那是对的吗?

如果就是这样,那么在编译/构建时识别不支持的Linq语句非常困难,使用静态分析,您需要解析代码以识别它。

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