48

Visual Studio で単体テストを実行すると、すべてのアセンブリがあるプロジェクト ディレクトリから実行されるため、正常に動作します。しかし、resharperで実行すると、エラーが発生します

var services = Assembly.Load("SomeAssembly");

エラーあり

ファイルまたはアセンブリ 'SomeAssembly' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません..

だから私は試しました

var path = Assembly.GetExecutingAssembly().Location;

それはプロジェクト1ではありません。これは

C:\Users\*UserName*\AppData\Local\Temp\TestResults\...\Out\

'SomeAssembly'はありません。resharper を正しく構成したり、Visual Studio のようにすべてのアセンブリを収集するにはどうすればよいですか?

単体テストでは発生しますが、NUnit では発生しません。何かアイデアはありますか?

4

10 に答える 10

44

Resharper は、既定でテスト用にアセンブリをシャドウ コピーします。シャドウ コピーをオフにすると、bin フォルダーで実行され、テストに合格するはずです。 オフにする手順を次に示します。

于 2013-04-30T03:07:24.857 に答える
3

テスト設定ファイルを作成して、テストの展開ルールを構成してみてください

古いバージョンの resharperでは、フォルダの展開を処理する際にいくつかのバグがあるようですが、最新バージョンの resharper 7 では修正されていると思います。

于 2013-04-30T18:17:46.763 に答える
3

このコードをロードしてみてください (以下を参照)。テストランナーとは無関係にアセンブリを検索します。

private static string[] assemblyLookupPath = new[]
{
    AppDomain.CurrentDomain.BaseDirectory, 
    Environment.CurrentDirectory,
    Assembly.GetExecutingAssembly().Location
}.Distinct().ToArray();

public static void Assembly Load(string fileName)
{
     var filePath = assemblyLookupPath
         .Select(f=>Path.Combine(f, fileName))
         .Where(File.Exists)
         .FirstOrDefault();

     /*do here null checks and raise errors, write logs, etc*/

     return Assembly.LoadFrom(filePath )
}
于 2015-08-18T14:34:43.337 に答える
2

を使用してアセンブリを動的にロードしていますAssembly.Load()。ロードするアセンブリへの参照が欠落している可能性があります。そうしないと、シャドウ コピーで参照されていないアセンブリが失われる可能性があります。

これらのアセンブリを参照したくない場合は、それらをプロジェクトに含めて、出力ディレクトリにコピーしてください。これを行うには、[出力ディレクトリにコピー] プロパティを設定するか、ビルド後のカスタム ステップを作成します。

于 2013-04-30T09:22:27.863 に答える