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>
これはまさに警告が助言するものです。
この警告を修正するにはどうすればよいですか?
ここで、警告を修正するために使用した手順:
Newtonsoft.Json 4.5.6への参照を持つMicrosoft.AspNet.WebApiを含むパッケージを更新し、バージョン6が既にインストールされていたため、この問題が発生しました。バージョン6を使用するのに十分ではありませんでした。
これを解決するために、WebApiの更新後、[ツール]> [NuGetパッケージマネージャー]> [Pacakgeマネージャーコンソール]を開いて実行しました。
Update-Package Newtonsoft.Json
ログは、6.0.xおよび4.5.6バージョンがすべて最新のものに更新され、すべてが正常であることを示しました。
これがまた来ると感じています。
プロジェクトファイルからこのセクションを削除すると、問題が修正されました。
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
上記のいずれも機能しない場合、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>
バインディングリダイレクトでは
oldVersion = "0.0.0.0-6.0.0.0"
古いバージョンのdllはバージョン0.0.0.0とバージョン6.0.0.0の間にあると言っています。
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地獄の問題をポップアップで修正することを切に望みます。あまりにも頻繁に発生し、試行錯誤によって修正されるまで進行が止まってしまうことがあります。
私の理解では正しい解決策である以下のことは誰も言及していません:
Nugetがインストールされているプロジェクトのcsprojに移動し、AutoGEneratedBindingRedirects
をfalse
に設定します。
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
パッケージを更新し、さらに再インストールしましたが、OPと同じエラーが表示されていました。以下を実行して、参照されたdllを手動で編集しました。
参照からnewtonsoft.json.dllを削除してから、bin directoyから.dllを手動で削除しました。次に、newtonsoft.json.dllをnugetパッケージフォルダーからプロジェクトbinに手動でコピーし、.dllファイルを参照して参照を追加しました。
これで、プロジェクトが再びビルドされます。
私は同様の問題を抱えており、私の状況で他の人に答えを投稿したかっただけです。
ASP.NET Webアプリケーションを他の複数のC#クラスライブラリプロジェクトと共に実行するソリューションがあります。
私のASP.NET Webアプリケーションはjsonではなく、他のプロジェクトを使用していました。
これは私がそれを修正した方法です:
まず、ステップ2では、jsonの構成情報を追加しました。これは、すべてのプロジェクトが、どのバージョンを使用していても最新バージョン(6)を使用することを示唆しています。 Web.Configにアセンブリバインディングを追加することが、おそらく修正です。
ただし、ステップ2では、SOMのレガシーコードもクリーンアップしました。以前にWebアプリケーションでjsonの古いバージョン(5)を使用しており、参照が削除された(手動で削除したと思われる)ときにNuGetフォルダーが削除されなかったことが判明しました。最新のjson(6)を追加し、古いフォルダーを削除しました(json v5)。これも修正の一部である可能性があります。