5

私は自分のmvcプロジェクトで遊んでいます。

  1. SocialAuth.Net というパッケージをプロジェクトに追加しました。このプロジェクトは、依存関係の 1 つとして Newtonsoft.Json.dll 4.0.0.0 (古い) を使用します。

  2. それから、私自身も Json.Net が必要だったので、新しいバージョンが欲しかったので、新しいバージョン 4.5.0.0 (より新しい) を持つ Json.NET を Nugeted しました。

その後、問題が発生します。私のカミソリビュー「ViewBag.Title = ....」では、赤い下線が次のように表示されます。

警告 1 c:\users\admin\documents\visual studio 2010\Projects\WebApp\WebApp\Views\Home\Index.cshtml: ASP.NET ランタイム エラー: ファイルまたはアセンブリ 'Newtonsoft.Json、バージョン = 4.5 を読み込めませんでした。 0.0、Culture=neutral、PublicKeyToken=30ad4fe6b2a6aeed' またはその依存関係の 1 つ。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)

これは私の web.config の Json 部分です:

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>

そう、

  1. References に移動し、確認したところ、Newtonsoft.Json が 4.0.0.0 (おそらく SocialAuth.Net に付属していた) であることがわかりました。それを削除し、Nuget から取得した 4.5.0.0 参照を追加しました。

  2. WebApp/bin/debug/ フォルダーに移動し、すべてを削除してから、プロジェクトを再構築しました。

ただし、webapp を再構築すると、新しい Nuget 4.5.0.0 を手動で参照する方法に関係なく、Newton.Json 4.0.0.0 が bin/debug/ に戻ります。そして同じエラーが返ってきます。ハマった。

この dll の問題に対処する方法を知っていますか? ありがとうございました。

編集 - - - - - - - - - - - - - - - - - -

少し考えてみると、最初に Json.Net (新しい 4.5) が最初にリンクされ、ビルド時に古いものがその後に来るためであることがわかりました。したがって、古い方が新しい方を上書きします。

私は GAC のインストールに慣れていませんが、ワームの缶を開いてそこに 2 つのバージョンをインストールできることは知っています。web.config をいじってこれを回避する方法はありますか?

4

1 に答える 1

0

フラグを付けてSocialAuth.Netパッケージをインストールしてから‑IgnoreDependencies、依存関係を手動でインストールし、最新バージョンのJson.Netライブラリのみをインストールするようにすることができます。

次に、実行時にSocialAuth.Netパッケージはアセンブリリダイレクトを尊重し、古いバージョンではなくJson.Net(v4.5)をロードします。

于 2012-07-11T10:46:57.070 に答える