1

Ant スクリプトで csc を使用して構築しているいくつかの C# クラスがあるプロジェクトがあります。NUnit2.6でテストしたい単体テストもいくつか作成しました。テスト クラスと実際のクラスは、この DLL を GAC (gacutil) にインストールすると、文字列キー名 (.snk) でコンパイルされた 1 つの DLL を参照します。 /i myDLL.dll) すべて正常に動作します。gac からこの DLL をアンインストールするとすぐに、NUnit を使用してテストを実行しようとすると、ビルド中にすべてのテストで次のエラーが発生します。

Test Error : fromJDynTest1
 [exec]    System.IO.FileNotFoundException : Could not load file or assembly 'myDLL, Version=5.1.0.0, Culture=neutral, PublicKeyToken=c0409b584f86b2d6' or one of its dependencies. The system cannot find the file specified.
 [exec]    at fromJDynTest1()
...
...

これを解決する方法を知っている人はいますか。他に情報が必要な場合はお知らせください。

ありがとう

--

シュネホ

4

1 に答える 1

1

テストしているコードは、アセンブリを表示できる gac に配置すると、問題のアセンブリを表示できません。テストしているコードのコンパイル時に bin ディレクトリにアセンブリがあることを確認する必要があります (おそらく、アセンブリ参照のプロジェクトで copy local が false に設定されています)。

依存関係ではないと確信している理由 (メッセージに記載されています) は、アセンブリが gac に配置されると状況が解決されるためです。アセンブリに厳密な名前が付けられているため、このエラーは発生しない可能性があります。

テスト コードがアセンブリを参照していないこと、およびそのテスト コードに参照がないか、同じ問題がある (コンパイルされたディレクトリにない)。

プロジェクトの実際のテストまたは構造を投稿すると役立ちます。

.net は次のようにアセンブリを検索します。

  1. アプリケーション構成ファイル、パブリッシャー ポリシー ファイル、コンピューター構成ファイルなど、該当する構成ファイルを調べて、正しいアセンブリ バージョンを判断します。構成ファイルがリモート マシンにある場合、ランタイムは最初にアプリケーション構成ファイルを見つけてダウンロードする必要があります。
  2. アセンブリ名が以前にバインドされているかどうかを確認し、バインドされている場合は、以前に読み込まれたアセンブリを使用します。以前に失敗した場合は、再び失敗します。
  3. gac をチェックします。アセンブリが見つかった場合、ランタイムはこのアセンブリを使用します。
  4. アセンブリのプローブ (テキスト エディターで .csproj ファイルを開くと、.net がアセンブリを見つけようとするヒントパスが表示されます)。
于 2012-04-24T22:43:31.127 に答える