0

私のチームが最近開始したプロジェクトで、新しく作成した SpecFlow 単体テストを実行しようとすると、次の例外が発生します。

Could not load file or assembly 'Iesi.Collections, Version=1.0.1.0, Culture=neutral,
PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. Access is denied.

Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4

...そして、失敗している C# フラグメントは次のようになります。

private static ISessionFactory _sessionFactory;

// ... Further down in the class ...
public static void GenerateSchema()
{
    _sessionFactory = Fluently.Configure(new Configuration().Configure())
                      .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(DataContext).Assembly))
                      .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
                      .BuildConfiguration()
                      .BuildSessionFactory();
}

...フュージョン ログは次のようになります。

=== Pre-bind state information ===
LOG: User = Unknown
LOG: DisplayName = Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4
(Fully-specified)
LOG: Appbase = file:///C:/Projects/SomeProject/SomeProject.FeatureTest/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : NHibernate, Version=3.3.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\SomeProject\FeatureTest\bin\Debug\SomeProject.FeatureTest.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4
LOG: Attempting download of new URL file:///C:/Projects/SomeProject/SomeProject.Web/bin/Debug/Iesi.Collections.DLL.
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated.

私(および私のチーム)は、次のことを試したため、これに困惑しています。

  1. packagesDLL が存在するディレクトリのフォルダのアクセス許可を確認します。
  2. ビルド時に Iesi.Collections DLL が bin\Debug にコピーされていることを確認します。
  3. NHibernate の設定が正常であることを確認します (それらは、私にとって機能するプロジェクトの設定と一致します)。
  4. TFS からプロジェクトを再取得しました。これが起こっているのは私だけなので、Get が破損している可能性があると考えました。これは効果がありませんでした。(再取得します。つまり、VS2012 を閉じ、既存のフォルダーを削除し、新しい VS2012 インスタンスを開き、[取得] > [詳細設定] > [特定のバージョンを取得] の両方のチェックマークをオンにします。)
  5. packagesDLL をディレクトリから C# プロジェクトに手動で再関連付けします。無効。
  6. DLL には公開キー トークンがあるため、DLL が署名されていることはわかっていますが、そうではありません。
  7. 上記のコードは除外できます。これは、この正確な行が他の 2 つのプロジェクトで使用され、単体テストの目的でローカル DB スキーマを設定しているためです。
  8. プロパティを表示して、DLL が Windows によってブロックされていないことを確認しました。ブロックされていません。
  9. Fusion ログで、Web プロジェクトから DLL をダウンロードしようとしていることに気付いたので、Web プロジェクトにも Iesi.Collections.dll を追加しました。無効。
  10. 私の SpecFlow のバージョンは 1.9.2 ですがCastle.Core、 、NHibernate.ByteCode.Castle、およびlog4netが欠落していることに気付いたので、データ アクセスを実行しているプロジェクト (C:\Projects\SomeProject\SomeProject.Core) にそれらを追加しました。無効。(これらは機能テストを実行できる別のプロジェクトにあるため、追加されました。つまり、この特定のソリューションにすぎません。)
  11. 他のプロジェクトのその他の条件により、デフォルトで管理者として VS2012 を実行しています。必死になったので、それを無効にして自分で実行しようとしましたが、効果がありませんでした。
  12. 追加の StackOverflow 調査では、別のユーザーがインターネット一時ファイルをクリアすることで同様の問題を克服したことが示されたので、CCleaner を起動しましたが、効果はありませんでした。
  13. More StackOverflow research revealed the tale of a guy who could solve his problems with a humble iisreset from the command line; I tried this, to no effect.

Question: What causes Iesi.Collections.dll to throw an Access Denied FileLoadException on NHibernate initialization?

4

2 に答える 2

2

ReSharper には、テスト対象のシャドウ コピー アセンブリに対してデフォルトでオンになっている設定があります。Resharper | Resharper に行くと見つかります。オプション...、ツール | 単体テスト。

このオプションを無効にすると、アセンブリが DLL に実行権限がないように見える場所にシャドウ コピーされなくなり、問題が解決されます。

tl;dr - ReSharper の設定を確認してください!

于 2013-09-10T14:05:15.723 に答える
2

この DLL ファイルはインターネットから取得しましたか? はいの場合、DLL が Windows によってブロックされていないことを確認する必要があります。これを確認するには、Windows エクスプローラーのファイル プロパティに移動し、[ブロック解除] というラベルの付いたボタンがあることを確認します。はいの場合、ファイルがブロックされています。バイナリ ファイルのブロックを解除するには、このボタンをクリックする必要があります。

于 2013-09-09T22:05:25.810 に答える