- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
似乎当我使用 OpenCover 检测程序集时, 组件与 SecurityTransparent属性(似乎还有 AllowPartiallyTrustedCallers)将抛出 VerificationException。我想知道为什么会这样,如果有另一种解决方案可以在不包含这些属性的情况下重新编译程序集,即条件编译,如下载的 MVC3 代码所示(但奇怪的是,当我浏览codeplex 上的存储库)。请注意,如果没有这些程序集属性,覆盖范围将毫无问题地运行。
OpenCover 使用 CALLI instruction将检测数据(序列点标识符)发送到分析器。调用这条指令的行为似乎导致了异常的发生;检测部分看起来很好,JIT 毫无问题地编译了新的检测方法。检测行为不会导致问题,因为如果我删除除使 Tiny 方法 Fat 和小分支变长之外的所有检测,代码将毫无问题地执行。
目前我正在使用 Mono.Cecil 检查通过“include-in-coverage”过滤器的程序集并向用户报告问题,同时跳过检测然后继续,但我想知道是否有任何问题我可以在分析期间避免此问题并避免重新编译。
所以总结 2 个问题“为什么会发生?”和“我可以在不重新编译的情况下避免它吗?”
注意:PartCover 似乎也出现了这个问题,它使用不同的方法来记录访问点。
注意:我是 OpenCover(一种开源代码覆盖工具)的开发者,目前是 PartCover 的维护者。
最佳答案
我在 MSDN 论坛上发布了答案 - Why do assemblies with the SecurityTransparent attribute cause instrumented code via a profiler to throw a VerificationException?
得到的答案是我应该查看 COR_PRF_DISABLE_TRANSPARENCY_CHECKS_UNDER_FULL_TRUST 标志(似乎只有 .NET4)
另见:
http://www.madgnome.fr/2011/09/verificationexception-and-profiling-the-hidden-flag/
关于c# - 为什么具有 SecurityTransparent 属性的程序集会导致通过探查器检测的代码抛出 VerificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218280/
我是一名优秀的程序员,十分优秀!