3

Visual Studio 2008 で Windows 7 を使用しています。

P/Invoke を使用してネイティブ DLL を呼び出す .NET アセンブリがあります。さまざまな呼び出しを行ってアセンブリをテストする Visual Studio ソリューションで、別の .NET 単体テスト プロジェクトをセットアップしました。ただし、単体テストがアセンブリへの呼び出しを行い、アセンブリが P/Invoke を使用して呼び出しを行うと、ネイティブ DLL が見つかりません。

スタンドアロンの .NET コンソール アプリケーションを作成する場合、問題はありません。アセンブリは P/Invoke を使用して、DLL を正常に見つけることができます。

アセンブリを使用する前に、DLL の絶対パスを指定して LoadLibrary を呼び出すことで、単体テストを機能させることができます。ただし、このアプローチは見苦しく、絶対パスが必要です。これは、他のユーザーにとって問題となります。

要するに、私の質問は、Visual Studio 単体テストの実行時に使用されている DLL 検索パスを指定または修正するにはどうすればよいですか?

どんな助けでも大歓迎です。

よろしく、ダン

4

3 に答える 3

3

Visual Studio 2008 統合テスト フレームワークを使用している場合は、DeploymentItemAttribute クラスを確認する必要があります。

基本的に、この属性でテスト メソッドをデコレートするだけで、テストが実行される前に、デプロイメント アイテムが出力ディレクトリに自動的にコピーされます。これを使用して、依存関係のツリー全体をコピーすることもできます。変数展開と相対パスをサポートしています。

また、VS2008 のテスト展開に関する一般的な情報については、「方法: テスト展開を構成する」を参照してください。

于 2011-11-09T16:20:59.500 に答える
3

問題は、ネイティブ DLL が単体テスト DLL と共に展開されていないことにあるようです。これは珍しい問題ではありません。マネージ DLL にはメタデータ内のネイティブ DLL への参照がないため、展開パッケージはそれらを展開することを認識していません。

最も適切な解決策は、DLL 検索パスを変更するのではなく、展開を修正することです。ただし、これは単体テスト固有の問題です。お手伝いできるように、使用しているフレームワークを教えていただけますか?

于 2010-08-20T17:41:31.087 に答える