1

Tl; drバージョン: 例外でスタックしています:System.IO.FileLoadException:ファイルまたはアセンブリを読み込めませんでした'DotNetOpenAuth.AspNet、バージョン4. 0 .0.0 .. ..

msftが新しいMVC4プロジェクトテンプレートの認証に非常に多くの静的クラスとメソッドを使用したことに少しがっかりしました。すべてのメンバーシップ/認証機能をインターフェイスを実装するクラスにラップして、単体テストをモックできるようにしたい。

数晩苦労した後、最初から始めることにしたので、すべてのDotNetOpenAuth*アセンブリ参照とnugetpackage.config参照を削除しました。同様に、Micrsoft.Aspnet.WebPages.OAuth.dllへのすべての参照を削除しました。

パッケージの再インストール: dll参照を必要とするソリューション内の3つのプロジェクトに対してinstall-packagedotnetopenauth.aspnet を実行します。

ラッパーにはMicrosoft.AspNet.WebPages.OAuth(.dll).OAuthWebSecurity.RegisteredClientDataをラップするメソッドがあるため、ソリューションはビルドされません。したがって、このアセンブリへの参照が必要なので、install- packagemicrosoft.aspnet.webpagesを実行します。同じ3つのプロジェクトに対する.oauth

ソリューションはビルドされますが、Microsoft.AspNet.WebPages.OAuth(.dll).OAuthWebSecurity.RegisteredClientDataを参照して単体テストを実行すると、ランタイム例外が発生します: System.IO.FileLoadException:ファイルまたはアセンブリを読み込めませんでした'DotNetOpenAuth.AspNet、バージョン4. 0.0.0 ..。

3つのプロジェクトすべてでのこのアセンブリへの参照は4.1.0.0を参照し、web.configのDotNetOpenAuth.AspNetassemblyIdentityも参照します。

テストを実行するためにresharperを使用していますが、テストはnunitスタイルです。

そして最後に、fuslogvwで見たもののペーストがあります。明らかに何かが4.0.0.0を探していますが、それについて何をすべきか、何をすべきか理解できません(このダンプで参照されている一時データフォルダーを数回削除しました):

** * **アセンブリバインダーログエントリ(2012年11月13日午後10時4分54秒)** * ** * ** * ** *

操作は失敗しました。バインド結果:hr=0x80131040。説明はありません。

アセンブリマネージャーの読み込み元:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll実行可能ファイルC:\ Program Files(x86)\ JetBrains \ ReSharper \ v7.0 \ Bin\JetBrains.ReSharper.TaskRunnerで実行.CLR4.MSIL.exe---詳細なエラーログは次のとおりです。

===事前バインド状態情報===ログ:ユーザー= i7 \ daveログ:DisplayName = DotNetOpenAuth.AspNet、バージョン= 4.0.0.0、カルチャー=ニュートラル、PublicKeyToken = 2780ccd10d57b246(完全に指定)ログ:Appbase =ファイル: /// C:/SVN/trunk/SoAndSo45/SoAndSo.Com.Tests.Unit/bin/Debugログ:初期PrivatePath = NULLログ:動的ベース= NULLログ:キャッシュベース= C:\ Users \ dave \ AppData \ Local \ Temp \ kpsvgxtp.io4ログ:AppName = SoAndSo.Com.Tests.Unit

アセンブリの呼び出し:SoAndSo.Com.Tests.Unit、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null。

ログ:このバインドは、デフォルトのロードコンテキストで開始されます。ログ:アプリケーション構成ファイルが見つかりません。ログ:ホスト構成ファイルの使用:ログ:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config\machine.configのマシン構成ファイルを使用します。ログ:ポリシー後の参照:DotNetOpenAuth.AspNet、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 2780ccd10d57b246ログ:GACルックアップが失敗しました。ログ:新しいURLファイルのダウンロードを試みています:/// C:/SVN/trunk/SoAndSo45/SoAndSo.Com.Tests.Unit/bin/Debug/DotNetOpenAuth.AspNet.DLL。ログ:アセンブリのダウンロードは成功しました。ファイルのセットアップを試みています:C:\ SVN \ trunk \ SoAndSo45 \ SoAndSo.Com.Tests.Unit \ bin \ Debug \ DotNetOpenAuth.AspNet.dllログ:ダウンロードキャッシュセットアップフェーズに入ります。ログ:アセンブリ名は次のとおりです:DotNetOpenAuth.AspNet、Version = 4.1.0.0、Culture = neutral、PublicKeyToken = 2780ccd10d57b246 WRN:アセンブリ名を比較すると、不一致が発生しました。マイナーバージョンERR:アセンブリ参照が見つかったアセンブリ定義と一致しませんでした。ERR:セットアップはhr=0x80131040で失敗しました。ERR:アセンブリのセットアップを完了できませんでした(hr = 0x80131040)。プローブが終了しました。

ありがとう!

4

2 に答える 2

5

これらのバインディングリダイレクトをテストプロジェクトのapp.configファイルに含めると、これらをNuGetパッケージとして単体テストプロジェクトにインストールし、機能させることができるはずです。

  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>

新しいMVCプロジェクトがあり、そのプロジェクトでNuGetのUpdate-Packageコマンドを実行すると、これらは自動的に作成されます。それを実行しておらず、単体テストプロジェクトにNuGetパッケージを新しくインストールした場合、単体テストプロジェクトには、Webプロジェクトよりも新しいアセンブリへの参照が含まれます。それはあなたが見たロード障害を引き起こすだろうと私は思います。すべてのアセンブリにソリューション全体で共通のバージョンがあること、または必要なバインディングリダイレクトが設定されていることを確認する必要があります。Microsoft.AspNet.WebPages.OAuth実際、DotNetOpenAuthアセンブリはパッケージよりも最近更新されているため、とにかくバインディングリダイレクトが必要だと思います。

于 2012-11-16T14:21:24.510 に答える
0

MsftのASP.NETチームのPMから、MVC4プロジェクトテンプレートに含まれているDLLのコレクションをコピー/再利用することを勧められました。これは私が行ったものであり、現在は機能しています。

DLLをNuGetの範囲外の「非管理」フォルダーに直接コピーして、本当に必要な場合を除いて、不注意で更新されないようにしました。

また、MVC4プロジェクトテンプレートにはすべてのDotNetOpenAuthのものの4.0。*が含まれているため、web.configのいくつかの参照とassy転送を4.1.0.0にクリーンアップする必要がありました。

于 2012-11-14T21:07:08.247 に答える