Вступая в источник DLL, вызываемой через отражение - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь вызвать метод .dll с помощью отражения, но получаю TargetInvocationException. Сценарий работает так: у меня есть dll с именем Labor.dll.. Он содержит несколько файлов, среди которых Demand.cs и Role.cs. Я могу успешно войти в функции, определенные в Demand.cs, но всякий раз, когда я пытаюсь войти в функцию, определенную в Role.cs, я получаю TargetInvocationException. Я не должен, однако, что эта ошибка происходит внутри метода Role.cs, поэтому .Net может найти метод и выполнить из него, он просто не покажет мне, что он делает.

Как мне перейти к методам, которые определены в Role.cs, или что помешает мне просмотреть этот код?

Дополнительная информация:

  • Labor.dll загружается и вызывается через отражение.
  • Когда я использую отражатель на Labor.dll, я могу просматривать методы, определенные в Role.cs
  • Метод в Role.cs выдает ошибку, когда выполняет код, который, по моему мнению, не должен выполняться, поэтому я больше сосредоточен на том, чтобы войти в код, чем на TargetInvocationException

1 Ответ

0 голосов
/ 23 марта 2011

После того, как я немного поигрался с этим кодом, я считаю, что нашел причину ошибки.

Похоже, что при использовании отражения .net попытается проверить сигнатуры методов перед выполнением этих методов.(это происходит, когда вы загружаете метод, содержащий недопустимый вызов метода).Поэтому я не смог зайти в Role.cs, потому что .net попытался бы проверить недопустимую сигнатуру метода, определенную в методе, который я вызывал.Закомментировав этот недопустимый вызов метода и перекомпилировав dll, я смог успешно войти в код Role.cs.

Суть в следующем:

AFAIK, вы не можете иметь недопустимыйподпись метода в .dll, которую вы вызываете с помощью отражения.Когда код, использующий недопустимый метод, загружен, .net найдет ошибку и выдаст исключение, , даже если этот код никогда не будет выполнен (в операторе if, который никогда не вернет true).

...