web-dev-qa-db-ja.com

新しいASP.NET MVC 5プロジェクトでNuGetパッケージ参照を更新した後、JSON.NETとのアセンブリバージョンの競合を修正するにはどうすればよいですか?

VS 2013(更新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>

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

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

78
Jim Lamb

ここで、警告を修正するために使用した手順:

  • VSでプロジェクトをアンロードする
  • .csprojファイルを編集する
  • Newtonsoft.Json Assembly へのすべての参照を検索します。
    • 2つ、1つはv6に、1つはv5に
    • V5への参照をv6に置き換えます
  • プロジェクトをリロードする
  • ビルドとアセンブリ参照エラーの通知
  • 参照を表示して、Newtonsoft.Jsonに2つあることを確認します。解決に失敗したものを削除します。
  • 再構築-警告なし
95
Jim Lamb

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

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

 Update-Package Newtonsoft.Json

ログは、6.0.xおよび4.5.6バージョンがすべて最新のものに更新され、すべてが正常であることを示しました。

これがまた来ると感じています。

27
McGaz

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

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

上記のいずれも機能しない場合、web.configまたはapp.configでこれを使用してみてください。

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
        <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>
    </assemblyBinding>
</runtime>
9
ZeroDotNet

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

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

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

Surf to the website

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

Existing web.config Assembly redirect

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

Assembly in the Reference list, in the relevant project

  1. [プロパティ]テーブルのバージョン(ランタイムバージョンではありません)を確認します。了解。

Properties table showing Version of Assembly

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

web.config Assembly redirect with updated newVersion

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

web.config Assembly redirect with updated oldVersion

喜ぶ。

5
user3638471

バインディングリダイレクトでは

oldVersion = "0.0.0.0-6.0.0.0"

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

3
Sherlock-jr

Newtonsoft.Json 11.0.1から12.0.2にアップグレードしました。 Notepad ++でプロジェクトファイルを開く

<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>

そして

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

バージョン11.0.1へのヒントパスで参照をラップするItemGroupを削除しました。

これらの問題は、見つけるのが非常にイライラする場合があります。さらに、開発者は多くの場合、以前のプロジェクトのセットアップと同じ手順に従います。以前のセットアップでは問題は発生しませんでした。何らかの理由で、プロジェクトファイルが誤って更新されることがあります。

MicrosoftがこれらのVisual Studio DLL地獄の問題をポップアップで修正することを切に望みます。あまりにも頻繁に発生し、試行錯誤によって修正されるまで進行が止まってしまうことがあります。

3

私の理解では正しい解決策である以下のことは誰も言及していません:

Nugetがインストールされているプロジェクトのcsprojに移動し、AutoGEneratedBindingRedirectsfalseに設定します。

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

MSDNの記事全体

0
Veverke

パッケージを更新し、さらに再インストールしましたが、OPと同じエラーが表示されていました。以下を実行して、参照されたdllを手動で編集しました。

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

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

0
Adam Heeg

私は同様の問題を抱えており、私の状況で他の人に答えを投稿したかっただけです。

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

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

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

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

まず、ステップ2では、jsonの構成情報を追加しました。これは、すべてのプロジェクトが、どのバージョンを使用していても最新バージョン(6)を使用することを示唆しています。 Web.Configにアセンブリバインディングを追加することが、おそらく修正です。

ただし、ステップ2では、SOMのレガシーコードもクリーンアップしました。以前にWebアプリケーションでjsonの古いバージョン(5)を使用しており、参照が削除された(手動で削除したと思われる)ときにNuGetフォルダーが削除されなかったことが判明しました。最新のjson(6)を追加し、古いフォルダーを削除しました(json v5)。これも修正の一部である可能性があります。

0
Nick Niebling