步入通过反射调用的dll源

时间:2011-03-23 16:04:25

标签: .net reflection reflector

我试图通过反射来调用.dll的方法,但我得到的是TargetInvocationException。该方案的工作方式如下:我有一个名为Labor.dll.的dll。它包含多个文件,其中包括Demand.csRole.cs。我可以成功地进入Demand.cs中定义的函数,但每当我尝试进入Role.cs中定义的函数时,我得到TargetInvocationException。但是,我不应该在Role.cs方法中发生此错误,因此.Net可以找到该方法并从中执行,它只是不会告诉我它在做什么。

如何进入Role.cs中定义的方法,或者阻止我查看该代码的方法?

额外信息:

    正在加载
  • Labor.dll并通过反射调用。
  • 当我在Labor.dll上使用反射器时,我可以查看Role.cs
  • 中定义的方法
  • Role.cs中的方法在执行我认为不应该执行的代码时抛出错误,这就是为什么我更专注于踩到代码而不是阻止TargetInvocationException

1 个答案:

答案 0 :(得分:0)

在摆弄这段代码一段时间之后,我相信我找到了错误的原因。

当您使用反射时,似乎.net将尝试在执行这些方法之前验证方法签名(当您加载容纳无效方法调用的方法时,它似乎会发生)。因此,我无法进入Role.cs,因为.net会尝试验证我调用的方法中定义的无效方法签名。通过注释掉无效的方法调用并重新编译dll,我能够成功进入Role.cs代码。

底线是:

AFAIK,您在.dll中无法通过反射调用无效的方法签名。当加载使用无效方法的代码时,.net将发现错误并抛出异常,即使该代码永远不会被执行(在if语句中永远不会返回true)。