92

VS 2013 (Update 1) で新しい ASP.NET MVC 5 Web プロジェクトを作成し、すべての NuGet パッケージを更新しました。プロジェクトをビルドすると、次の警告が表示されます。

警告 MSB3243: "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" と "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" の間の競合を解決する方法がありません。

ただし、web.config を確認すると、バインディング リダイレクトが配置されていることがわかります。

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

これはまさに警告が助言するものです。

この警告を修正するにはどうすればよいですか?

4

11 に答える 11

109

警告を修正するために使用した手順は次のとおりです。

  • VS でプロジェクトをアンロードする
  • .csproj ファイルを編集する
  • Newtonsoft.Json アセンブリへのすべての参照を検索します
    • 2 つ見つかりました。1 つは v6 に、もう 1 つは v5 に
    • v5 への参照を v6 に置き換えます
  • プロジェクトをリロード
  • アセンブリ参照の失敗をビルドして通知する
  • 参照を表示し、Newtonsoft.Json に 2 つあることを確認します。解決に失敗しているものを削除します。
  • 再構築 - 警告なし
于 2014-02-01T14:45:01.793 に答える
32

Newtonsoft.Json 4.5.6 への参照を持つ Microsoft.AspNet.WebApi を含むパッケージを更新し、バージョン 6 を既にインストールしていたため、この問題が発生しました。バージョン 6 を使用するほど賢くはありませんでした。

それを解決するために、WebApi の更新後に [ツール] > [NuGet パッケージ マネージャー] > [Pacakge Manager Console] を開いて実行しました。

 Update-Package Newtonsoft.Json

ログは、6.0.x と 4.5.6 のバージョンがすべて最新のものに更新され、すべて問題がないことを示していました。

これはまた出てくる予感。

于 2014-10-30T16:11:11.113 に答える
21

プロジェクトファイルからこのセクションを削除すると、問題が解決することがわかりました。

<ItemGroup>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>

于 2014-02-16T22:48:30.280 に答える
8

アセンブリ リダイレクト エラーの最終的な解決策

さて、うまくいけば、これが(正気の)アセンブリ参照の不一致を解決するのに役立つはずです...

  1. エラーを確認してください。

ウェブサイトにサーフィン

  1. アセンブリのリダイレクト後に web.config を確認します。存在しない場合は作成します。

既存の web.config アセンブリ リダイレクト

  1. アセンブリの参照を右クリックし、[プロパティ] を選択します。

関連するプロジェクトの参照リストのアセンブリ

  1. プロパティ テーブルでバージョン (ランタイム バージョンではない) を確認します。了解。

アセンブリのバージョンを示すプロパティ テーブル

  1. newVersion 属性に貼り付けます。

更新された newVersion による web.config アセンブリのリダイレクト

  1. 便宜上、oldVersion の最後の部分を高く、丸く、架空のものに変更します。

更新された oldVersion を使用した web.config アセンブリ リダイレクト

喜ぶ。

于 2016-03-13T15:15:10.660 に答える
6

バインディングのリダイレクトでそれを覚えておいてください

oldVersion="0.0.0.0-6.0.0.0"

古いバージョンの dll はバージョン 0.0.0.0 とバージョン 6.0.0.0 の間にあると言っています。

于 2015-06-17T12:58:01.130 に答える
1

パッケージを更新し、再インストールしましたが、OPが言及したのとまったく同じエラーが引き続き発生しました。次のようにして、参照されている dll を手動で編集しました。

リファレンスから newtonsoft.json.dll を削除し、手動で bin ディレクトリから .dll を削除しました。次に、newtonsoft.json.dll を nuget パッケージ フォルダーからプロジェクト ビンに手動でコピーし、.dll ファイルを参照して参照を追加しました。

これで、プロジェクトが再びビルドされます。

于 2015-03-07T19:52:40.957 に答える
0

同様の問題があり、私の状況で他の人に回答を投稿したかっただけです。

他の複数の C# クラス ライブラリ プロジェクトを使用して ASP.NET Web アプリケーションを実行するソリューションがあります。

私の ASP.NET Web アプリケーションは json を使用していませんでしたが、他のプロジェクトでは使用していました。

これは私がそれを修正した方法です:

  1. 現在jsonの任意のバージョンを使用しているすべてのプロジェクトでNuGet Updateを使用して、最新バージョン(6)を使用しているすべてのプロジェクトを確認しました-これは問題を解決しませんでした
  2. NuGet を使用して Web アプリケーションに json を追加しました。これで問題が解決しました (理由を詳しく説明します)。

ステップ 2 では、最初に json の構成情報を追加しました。これは、すべてのプロジェクトがバージョンに関係なく最新バージョン (6) を使用することを示唆しています。アセンブリ バインディングを Web.Config に追加すると、修正される可能性が高くなります。

ただし、手順 2 では一部のレガシー コードもクリーンアップされています。以前に Web アプリケーションで古いバージョン (5) の json を使用していたことが判明し、参照が (おそらく手動で) 削除されたときに NuGet フォルダーが削除されませんでした。最新の json (6) を追加し、古いフォルダー (json v5) を削除しました。これも修正の一部かもしれません。

于 2014-11-19T13:35:15.723 に答える