4

序章

今日、ASP.NET MVC アプリケーションを更新したところ、次のエラーが発生しました (ドイツ語 - 申し訳ありません)。

Die Datei order Assembly "WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ore abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)

(アセンブリ「WebGrease、バージョン 1.5.1.25624」が見つかりませんでした)

アセンブリ System.Web.Optimization、Version=1.1.0.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35 が WebGrease アセンブリを読み込もうとして失敗しました。

解決

この問題は、次のように web.config にバインド リダイレクトを追加することで簡単に回避できることを知っています (WebGrease を更新したため)。

  <dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.6.5135.21930" />
  </dependentAssembly>

さらなる質問

なぜこれが必要なのか、また *.Optimization アセンブリがどのように作成されるのかを知っていただければ幸いです。System.Web.Optimization 1.1.3 アセンブリは WebGrease 1.5.2 に依存しており、「別のバージョンの WebGrease を使用する」-リダイレクトにより、新しいバージョンには存在しないメソッド呼び出しが発生する可能性がありますね。

*.Optimization の開発者は、プロジェクトに WebGrease 1.5.2 への参照を含め、ビルド後に WebGrease アセンブリを削除し、NuGet パッケージを作成しましたか? それとも、コードでアセンブリをロードしますか?

これがどのように機能するかについての説明は本当にありがたいです。ありがとうございました。

4

2 に答える 2

1

この問題に関するMSDN doc からの抜粋:

アプリ構成ファイルを手動で編集して、アセンブリの問題を解決できます。たとえば、ベンダーが下位互換性を保証しないため、アプリが使用するアセンブリの新しいバージョンをパブリッシャー ポリシーを提供せずにリリースする可能性がある場合、アセンブリ バインディング情報を追加することで、アプリがアセンブリの新しいバージョンを使用するように指示できます。アプリの構成ファイルで。

私もずっと前にこの同じ問題に直面しました... とにかく、これはCodePlexのこの作業項目によると、NuGet パッケージの問題だと思います。

于 2014-04-26T17:00:57.917 に答える
1
  • 1) アセンブリのマニフェストで指定されたエントリをオーバーライドする必要があります。これは、通常のバインディング ポリシーを使用しても見つからない問題のあるバージョンのアセンブリを参照しています。(つまり、アセンブリがプローブされる典型的な場所)。
    • 1a) 重大な変更がある可能性がありますが、問題のアセンブリのある種の寛容なバージョン管理が望まれます。おそらくある種のセマンティックバージョニングシステムでしょう。
  • 2) Leniel のように、Nuget からアセンブリをダウンロードするときにこの問題に直面しました。私の経験では、C などのアセンブリがアセンブリ A と B で必要とされた結果として発生しましたが、Nuget を使用してアセンブリ B をダウンロードすると、A が使用していたアセンブリ C のバージョンが無効になります。混乱とイライラの両方。
于 2014-04-26T17:28:50.353 に答える