Почему сборки с атрибутом SecurityTransparent заставляют инструментальный код через профилировщик генерировать исключение VerificationException? - PullRequest
5 голосов
/ 28 августа 2011

Кажется, что когда я инструментирую сборку, используя OpenCover , сборки с атрибутом SecurityTransparent (и, кажется, AllowPartiallyTrustedCallers) сгенерируют исключение VerificationException.Я хотел бы знать, почему это так и есть ли альтернативное решение для перекомпиляции сборки без включенных атрибутов, то есть условной компиляции, как видно из загруженного кода для MVC3 (но, как ни странно, я не могу найти то же самое, когда просматриваюхранилище в кодекплексе).Обратите внимание, что без этих атрибутов сборки покрытие выполняется без проблем.

OpenCover использует инструкцию CALLI для отправки данных инструментов (идентификатора точки последовательности) в профилировщик.Кажется, что вызов этой инструкции вызывает исключение;инструментальная часть выглядит нормально, и JIT без проблем компилирует новый инструментальный метод.Акт инструментария не вызывает проблем, потому что если я удаляю все инструментарий, кроме как делать методы Tiny Fat и маленькие ветви, код выполняется без проблем.

В настоящее время я использую Mono.Cecil для проверки сборок, которые проходятФильтр «включить в покрытие» и сообщить о проблеме пользователю, пропустив инструментарий, а затем продолжить, но я хотел бы знать, могу ли я что-нибудь сделать во время профилирования, чтобы избежать этой проблемы и избежать перекомпиляции.

Итак, чтобы подвести итог 2 вопроса "Почему это происходит?"и "Могу ли я избежать этого без перекомпиляции?"

ПРИМЕЧАНИЕ: PartCover также, похоже, демонстрирует эту проблему и использует другой метод для записи точек посещения.

ПРИМЕЧАНИЕ: я являюсь разработчиком OpenCover (инструмента покрытия с открытым исходным кодом) и в настоящее времясопровождающий PartCover.

1 Ответ

2 голосов
/ 02 сентября 2011
...