DllImportピンボケを使用してVS2010のC++ DLLを呼び出すVS2012プロジェクトのC#ユニットテストがあります。vstestディスカバリエンジンがDLLをロックしないようにする
テストプロジェクトのビルド前イベントとして、DLLの最新バージョンをテストのバイナリプロジェクトにコピーします。
vstest.discoveryengineが実行されている場合、これは繰り返し失敗します。 'discovery engine'がテストをロードしてDLLにロックを保持しているようです。
私がvstestディスカバリーエンジンを殺すと、テストをビルドして実行できます。それ以外の場合はビルドに失敗し、VS2012は以前のバージョンを実行するように提案しています(このメッセージをもう一度表示しないモデルダイアログで)
テストを強制するには何かできますか実際にテストを実行していないときにDLLをアンロードするか、バックグラウンド検索実行ファイルを無効にするプロジェクトですか?
Kealakekuaという名前の実行可能ファイルを作成し、vstest.discoveryengine.x86、vstest.executionengine.x86を削除し、ビルド前のイベントの最初の部分として、ファイルをコピーしてビルドできるようにすることで回避策をハッキングしました私のファイルのためにビジュアルスタジオと戦っていない方が好きです。
コードを使ってテストクラスにDLLをロードすることはできますか? – Joel
@Joel実際にはありません - テストはDLLを直接ロードしていません。テストしているコードはDLLです。私はその仕事をするのに必要な以上に生産コードを複雑にする必要はありません。テストコードとテスト中のアセンブリとの間のリンクがテストコード側で壊れる可能性がありますが、それが機能する可能性があります。 –