1

C# アセンブリでビルド後の手順を使用して、dll から関数シグネチャを公開しています。この手順では、 http://www.codeproject.com/KB/dotnet/DllExport.aspxの ExportDll ツールを使用します。ただし、mstest を使用して dll を実行し、コード カバレッジ レポートを取得しようとすると、次のエラーが発生します。

Instrumentation error while trying to process the file MyAssembly.dll
Error VSP1011 : Unable to obtain debug information. Link with the /Profile linker switch.

(いくつかの P/Invoke シグネチャを除いて) アセンブリにアンマネージ コードがないことを考えると、これは奇妙です。ビルド後の手順を実行すると、コードが適切に計測され、コード カバレッジ レポートを取得できます。したがって、それはこのビルド後のステップであり、コード自体の何かではないとしか言​​えません。

私は、ExportDll 後のバージョンをビルドして配布しながら、ExportDll 以外のバージョンのコードを使用して単体テストを実行するという考えに傾倒しています。他のコンポーネントが DLL エクスポートを介して関数を見つけることができるかどうかよりも、コードがテストされているかどうかに主に関心があるので、これが悪い解決策だとは思いません。ただし、ビルド管理の悪夢であり、チームに「そのアセンブリではなく、このアセンブリを使用する」と説明する必要があると感じています。

このツールで実行された dll の単体テストを行った経験のある人はいますか? あるいは、ildasm/ilasm を使用してコンパイル、逆コンパイル、および再アセンブルされたアセンブリを計測した経験のある人はいますか?

4

1 に答える 1

0

ExportDll ユーティリティは元のアセンブリを書き換えますが、 ilasmを使用して再コンパイルするときに新しいインストルメンテーションを考慮して PDB を更新していない可能性があります。 、これにより、新しくインストルメント化されたアセンブリと互換性のある PDB が生成されます。

ソース コードを見ると、新しい PDB を生成するように ilasm に指示するように、program.cs の 348 行目にスイッチを追加する必要があります。

于 2012-02-21T21:24:43.130 に答える