私はVisual Studioプロジェクトを持っています。
Newtonsoft.Jsonライブラリが必要です。
Visual Studio 2017のNuGetパッケージマネージャーで参照されています。 実際はバージョン10.0.3です。.Net NuGetパッケージの競合 - DLL地獄が戻ってきた
このプロジェクトは、NuGetパッケージLibAとLibBを参照しています。
LIBA Newtonsoft.Jsonバージョン8を使用し、これはpackage.nuspecに定義されている:
<dependency id="RestSharp" version="105.2.3" />
<dependency id="Newtonsoft.Json" version="8.0.3" />
<dependency id="CommonServiceLocator" version="1.3" />
LibB使用NewtonSoft.Jsonバージョン10と、これはpackage.nuspecに定義されている:
<dependency id="RestSharp" version="105.1" />
<dependency id="Newtonsoft.Json" version="10.0.3" />
Visual Studio 2017のNuGet Package Manager(ソリューション上)を使用してLibAパッケージ(たとえばバージョン1.1から1.2)を更新すると、.csprojファイルで期待通りにLibAパッケージの参照が更新されます。
- <HintPath>..\packages\LibA.1.1\lib\net40\MyService.dll</HintPath>
+ <HintPath>..\packages\LibA.1.2\lib\net40\MyService.dll</HintPath>
が、それはまたNewtonsoft.Jsonライブラリのリファレンス更新:
- <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
- <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
+ <Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\packages\LibA.1.2\lib\net40\\Newtonsoft.Json.dll</HintPath>
アプリ/ web.configファイル:
- <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
+ <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
をまた正確でLIBAの参照を更新package.config:
- <package id="LibA.MyService" version="1.1" targetFramework="net45" />
+ <package id="LibA.MyService" version="1.2" targetFramework="net45" />
ただし、間違ったref Newtonsoft.Jsonライブラリのバージョンにレンス:
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net47" />
私は約2物事文句を言う:私は私がNewtonsoft.Jsonを使用していることを示しているNuGetパッケージマネージャを開くと
を現在のプロジェクトのバージョン10.0.3:
binフォルダーにソリューションをビルドするとバージョン8.0.3 が格納され、Newtonsoft.Jsonは「既に」存在しているため更新できないため、これは当てはまりません。更新しました。
さらにvesion 10を必要とする私のプロジェクトとLibBは、実際に私はは実際に私はすべて手動で.configファイルと.csprojをマージし、正しいする必要があり、自動的にバージョン10を維持することを決定することはできませんバージョン8を使用していますファイル!
この悪夢を避ける方法はありますか?
追加情報
プロジェクトとLibBが.Net 4.7に設定されています。 012B LibAはまだ.Net 4.5にあります。
LibAおよびLibBは、NuGet社のリポジトリに展開されています。私はLIBA(およびLibB)パッケージでNewtonsoft.Jsonライブラリを含まないように頑張りますコメントで示唆したように
[更新]
。私はこれにそれを変更し
<files>
<file src="bin\$configuration$\**\*.*" exclude="**\*.pdb" target="lib\net40"/>
</files>
:これ(と思う)のため、実際にそれが起こる
<files>
<file src="bin\$configuration$\**\MyCompany.*.*" exclude="**\*.pdb" target="lib\net40"/>
</files>
、それは動作しますが、Newtonsoft.JsonパッケージはNuGetから取られています。
新しいcsproj形式を使用できますか?ヒントはありません。 –
LibAはNewtonsoft.Json.dllを独自のnupkgファイルbtwに含めているようですが、これは問題の原因となっている可能性があります。 –
DLLをコピーする代わりにnewtonsoft Jsonを参照するliba nugetパッケージを書き直せますか? – dariogriffo