11

プロジェクトで非常に奇妙なエラーに直面しています。DotnetOpenAuth.AspnetおよびMicrosoft.AspNet.WebPages.OAuthライブラリのnugetパッケージをインストールしました。プロジェクトを実行しても問題はありません。しかし、コントローラーのテストを作成すると、次のような例外がスローされます。

テストメソッドMvcApplication2.Tests.ControllerTest.should_return_not_empty_contentが例外をスローしました:

    System.IO.FileLoadException: Could not load file or assembly 'DotNetOpenAuth.AspNet, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' 
or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

もう1つの奇妙な点は、MVC3アプリケーションとしてVS 2010でプロジェクトをセットアップし、テストに合格した場合です。失敗はありません。しかし、VS2012でまったく同じセットアップを実行すると、上記と同じエラーが発生します。stackoverflowで検索すると、この解決策 が見つかりましたが、どちらも機能しませんでした。

次の行にすべてのプロジェクトとサンプルテストがあります。これは、1つのアプリと1つのテストプロジェクトです。とても読みやすいです。

また、コントローラーと失敗したテスト用のサンプルコードをここに追加しました。

コードプレビューのペーストビンリンクはhttp://pastebin.com/1PCpq3hWです。

どんな助けでもいただければ幸いです。

Vs2010および2012の失敗および成功したプロジェクト

次のような詳細なログ結果

    ***アセンブリバインダーログエントリ(13.12.2012 @ 22:27:31)***

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

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

    ===バインド状態情報===
    ログ:ユーザー=開発者-PC \ DEVELOPER
    ログ:DisplayName = DotNetOpenAuth.AspNet、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 2780ccd10d57b246
     (完全に指定)
    ログ:Appbase = file:/// D:/Development/Coachius/CoachiusWeb.Tests/bin/Debug
    ログ:初期PrivatePath = NULL
    ログ:動的ベース= NULL
    ログ:キャッシュベース= NULL
    ログ:AppName = NULL
    アセンブリの呼び出し:CoachiusWeb、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null。
    ===
    ログ:このバインドは、デフォルトのロードコンテキストで開始されます。
    ログ:アプリケーション構成ファイルの使用:D:\ Development \ Coachius \ CoachiusWeb.Tests \ bin \ Debug \ CoachiusWeb.Tests.dll.config
    ログ:ホスト構成ファイルの使用:
    ログ:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config\machine.configのマシン構成ファイルを使用しています。
    ログ:ポリシー後の参照:DotNetOpenAuth.AspNet、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 2780ccd10d57b246
    ログ:GACルックアップは失敗しました。
    ログ:新しいURLファイルのダウンロードを試みています:/// D:/Development/Coachius/CoachiusWeb.Tests/bin/Debug/DotNetOpenAuth.AspNet.DLL。
    ログ:アセンブリのダウンロードは成功しました。ファイルのセットアップを試みています:D:\ Development \ Coachius \ CoachiusWeb.Tests \ bin \ Debug \ DotNetOpenAuth.AspNet.dll
    ログ:ソースから実行のセットアップフェーズに入ります。
    ログ:アセンブリ名は次のとおりです:DotNetOpenAuth.AspNet、Version = 4.1.0.0、Culture = neutral、PublicKeyToken = 2780ccd10d57b246
    WRN:アセンブリ名を比較すると、不一致が発生しました:マイナーバージョン
    エラー:アセンブリ参照が、見つかったアセンブリ定義と一致しませんでした。
    ERR:ソースからの実行セットアップフェーズがhr=0x80131040で失敗しました。
    ERR:アセンブリのセットアップを完了できませんでした(hr = 0x80131040)。プローブが終了しました。

4

6 に答える 6

5

私は可能な解決策を見つけたかもしれないと思います。

このリンクを参照してください

ここで重要な情報は 3 行目と 7 行目にあります。基本的に、Microsoft.Web.WebPages.OAuth には DotNetOpenAuth.Core 4.0.0.0 が必要ですが、私が持っている DotNetOpenAuth.Core はバージョン 4.3.0.0 です。

于 2013-08-08T14:14:13.613 に答える
1

これは、VS 2012 の非常に厄介なバグによるものです。VS 2012 のテスト プロジェクトでは、app.config ファイルのアセンブリ リダイレクトが機能しません。

これは、VS 2012 ではなく VS 2010 で機能する理由を説明しています。

それはかなり迷惑です。

回避策として、.testsettings ファイルを追加し、それをテスト メニューからプロジェクトに関連付けます。そうしないと、メニューに表示されません。

注意してください、インターネット上の多くのリソースは、古いバージョンを強制的に動作させる実行設定はうまくいくと言っていますが、そうではありません. VS / テスト プロセスがクラッシュします。テスト設定ファイルが必要です。

それによってあなたがしていることは、このバグを持たない VS2010 ランナーを使用することです。その一方で、それはより遅いです。

Microsoft がこれをすぐに修正してくれることを願っています。問題は OpenAuth だけでなく、文字通り、別の DLL とは異なるバージョンを使用しているすべての DLL にあります。

DLL Hell バージョン 2012 へようこそ。

于 2012-12-15T07:37:17.923 に答える
0

テストプロジェクトにアセンブリを追加しましたか?コンパイルすると、フォルダに表示されます。テストプロジェクトはホストであるため、テストには同じアセンブリが必要です(セットアップによって異なりますが、原則として)

もしそうなら、あなたは実際のバインディングの詳細でさらに一歩を見ることができます。

フュージョンロギングの有効化については、こちらの投稿を参照してください。 .NETでアセンブリバインド失敗ログ(Fusion)を有効にする方法

それを有効にし、フォルダをチェックして、バインドの失敗を探します-どのアセンブリがそれをロードしようとしているのかがわかります(通常)。そうでない場合は、成功と失敗を有効にして、すべてのアセンブリバージョンを確認します。問題の追跡に役立つ複数のバージョンがロードされている場合や、予期しないバージョンが表示される場合があります。

于 2012-12-13T19:09:13.797 に答える
0

web.config ファイルで bindingRedirects を探し、それらが単体テストの app.config ファイルにも存在することを確認します。

于 2012-12-13T16:00:09.290 に答える
0

バージョンを 4.1.0.0 に変更したところ、うまくいきました

 <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780CCD10D57B246" culture="neutral" />
    <bindingRedirect oldVersion="1.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780CCD10D57B246" culture="neutral" />
    <bindingRedirect oldVersion="1.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>
于 2016-06-17T14:43:07.503 に答える