5

OpenCoverを使用してアセンブリをインストルメント化すると、SecurityTransparent属性 (および AllowPartiallyTrustedCallers のように見える) を持つアセンブリが VerificationException をスローするようです。その理由と、MVC3 のダウンロードされたコードに見られるように、条件付きコンパイルなど、これらの属性を含めずにアセンブリを再コンパイルする別の解決策があるかどうかを知りたいのですが (奇妙なことに、 codeplex のリポジトリ)。これらのアセンブリ属性がなくても、カバレッジは問題なく実行されることに注意してください。

OpenCover は、CALLI命令を使用して、計測データ (シーケンス ポイント識別子) をプロファイラーに送信します。この命令を呼び出すと、例外が発生するようです。インストルメンテーション部分は問題ないようで、JIT はインストルメント化された新しいメソッドを問題なくコンパイルします。Tiny メソッドの Fat と小さなブランチを長くする以外のすべてのインストルメンテーションを削除すると、コードは問題なく実行されるため、インストルメンテーションの行為は問題を引き起こしません。

現在、Mono.Cecil を使用して「include-in-coverage」フィルターを通過するアセンブリを調べ、インストルメンテーションをスキップしてユーザーに問題を報告してから続行していますが、できることがあるかどうか知りたいです。この問題を回避し、再コンパイルを避けるために、プロファイリング中に実行してください。

2つの質問を要約すると、「なぜそれが起こるのか?」および「再コンパイルせずに回避できますか?」

注: PartCover にもこの問題が見られるようで、別の方法を使用して訪問ポイントを記録します。

注: 私は OpenCover (オープン ソース コード カバレッジ ツール) の開発者であり、現在は PartCover のメンテナーです。

4

1 に答える 1

2

MSDN フォーラムに回答を投稿しました - SecurityTransparent 属性を持つアセンブリにより、プロファイラーを介してインストルメント化されたコードが VerificationException をスローするのはなぜですか?

COR_PRF_DISABLE_TRANSPARENCY_CHECKS_UNDER_FULL_TRUSTフラグを確認する必要があるという回答を得ました(.NET4のみのようです)

以下も参照してください。

http://www.madgnome.fr/2011/09/verificationexception-and-profiling-the-hidden-flag/

https://web.archive.org/web/20190114032309/https://blogs.msdn.microsoft.com/davbr/2010/01/07/clr-v4-stuff-that-may-break-your-profiler

于 2011-09-02T13:08:49.957 に答える