Кажется, что когда я инструментирую сборку, используя OpenCover , сборки с атрибутом SecurityTransparent (и, кажется, AllowPartiallyTrustedCallers) сгенерируют исключение VerificationException.Я хотел бы знать, почему это так и есть ли альтернативное решение для перекомпиляции сборки без включенных атрибутов, то есть условной компиляции, как видно из загруженного кода для MVC3 (но, как ни странно, я не могу найти то же самое, когда просматриваюхранилище в кодекплексе).Обратите внимание, что без этих атрибутов сборки покрытие выполняется без проблем.
OpenCover использует инструкцию CALLI для отправки данных инструментов (идентификатора точки последовательности) в профилировщик.Кажется, что вызов этой инструкции вызывает исключение;инструментальная часть выглядит нормально, и JIT без проблем компилирует новый инструментальный метод.Акт инструментария не вызывает проблем, потому что если я удаляю все инструментарий, кроме как делать методы Tiny Fat и маленькие ветви, код выполняется без проблем.
В настоящее время я использую Mono.Cecil для проверки сборок, которые проходятФильтр «включить в покрытие» и сообщить о проблеме пользователю, пропустив инструментарий, а затем продолжить, но я хотел бы знать, могу ли я что-нибудь сделать во время профилирования, чтобы избежать этой проблемы и избежать перекомпиляции.
Итак, чтобы подвести итог 2 вопроса "Почему это происходит?"и "Могу ли я избежать этого без перекомпиляции?"
ПРИМЕЧАНИЕ: PartCover также, похоже, демонстрирует эту проблему и использует другой метод для записи точек посещения.
ПРИМЕЧАНИЕ: я являюсь разработчиком OpenCover (инструмента покрытия с открытым исходным кодом) и в настоящее времясопровождающий PartCover.