我试图通过反射来调用.dll的方法,但我得到的是TargetInvocationException
。该方案的工作方式如下:我有一个名为Labor.dll.
的dll。它包含多个文件,其中包括Demand.cs
和Role.cs
。我可以成功地进入Demand.cs
中定义的函数,但每当我尝试进入Role.cs
中定义的函数时,我得到TargetInvocationException
。但是,我不应该在Role.cs
方法中发生此错误,因此.Net可以找到该方法并从中执行,它只是不会告诉我它在做什么。
如何进入Role.cs
中定义的方法,或者阻止我查看该代码的方法?
额外信息:
Labor.dll
并通过反射调用。Labor.dll
上使用反射器时,我可以查看Role.cs
Role.cs
中的方法在执行我认为不应该执行的代码时抛出错误,这就是为什么我更专注于踩到代码而不是阻止TargetInvocationException
答案 0 :(得分:0)
在摆弄这段代码一段时间之后,我相信我找到了错误的原因。
当您使用反射时,似乎.net将尝试在执行这些方法之前验证方法签名(当您加载容纳无效方法调用的方法时,它似乎会发生)。因此,我无法进入Role.cs
,因为.net会尝试验证我调用的方法中定义的无效方法签名。通过注释掉无效的方法调用并重新编译dll,我能够成功进入Role.cs
代码。
底线是:
AFAIK,您在.dll中无法通过反射调用无效的方法签名。当加载使用无效方法的代码时,.net将发现错误并抛出异常,即使该代码永远不会被执行(在if语句中永远不会返回true)。