0

私のニーズに合わせて、OpenCover と NUnit にいくつかの変更を加えています。

簡単に言うと、Nunit でシャドウ コピーが有効になっている場合でも、カバレッジ情報を取得したいと考えています。ただし、pdb ファイルが存在しない場合、OpenCover はアセンブリを追跡できません。NUnit でシャドウ コピーが有効になっている場合、テスト対象のアセンブリはシャドウ ディレクトリにコピーされ、OpenCover は対応する pdf ファイルを見つけることができません。

最初は、.Net ランタイムが pdb ファイルをシャドウ ディレクトリにコピーしていないだけだと思っていました。しかし、この問題をさらに調査したところ、ランタイムは pdb ファイルをコピーしますが、アセンブリがコピーされるのとは同時にではないことがわかりました。

私の理解では、ランタイムは最初にアセンブリをシャドウ ディレクトリにコピーします。そして、それらのアセンブリが読み込まれ、Opencover に通知されます。OpenCover は pdb ファイルがないことを検出したため、これらのアセンブリは無視されます。しばらくして、pdb ファイルがコピーされますが、OpenCover はこの事実に気付かなかったため、これらのアセンブリを追跡できませんでした。

私の質問は、.Net ランタイムが pdb ファイルをシャドウ ディレクトリにコピーする正確な時刻はいつですか? また、これらのシャドウ コピーされたアセンブリを追跡できるように、OpenCover を変更することは可能ですか?

4

1 に答える 1

0

ただし、pdb ファイルが存在しない場合、OpenCover はアセンブリを追跡できません。

これは、PDB なしで読み込まれるすべてのアセンブリをインストルメント化するということは、情報が PDB にある各シーケンス ポイントではなく、すべての IL 操作をインストルメント化することを意味するため、設計によるものです。

しばらくして、pdb ファイルがコピーされますが、OpenCover はこの事実に気付かなかったため、これらのアセンブリを追跡できませんでした。

PDB が後でコピーされた場合、OpenCover には遅すぎます。これは、ランタイムがアセンブリを既に読み込んでいるため、OpenCover がインストルメンテーションの決定を行っているためです。

現在、 OpenCover はさまざまな場所を使用して PDB を探しています

  1. アセンブリがロードされたのと同じフォルダーに見えます
  2. によって設定されたフォルダーを検索します-workingdir
  3. 現在のディレクトリを検索します

ただし、 /noshadow をサポートするために、通常、-mergebyhashオプションでこれが解決されることがわかります。そうでない場合は、上記のリストから最も使いやすい #2 を使用します。

于 2015-01-26T20:07:34.867 に答える