我有一个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包管理器(在解决方案上) 更新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" />
它还更新正确的力霸参考package.config:
- <package id="LibA.MyService" version="1.1" targetFramework="net45" />
+ <package id="LibA.MyService" version="1.2" targetFramework="net45" />
但是离开WRONG ref erence到Newtonsoft.Json库版本:
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net47" />
我抱怨两件事:
如果我打开的NuGet包管理器则显示出我使用的Newtonsoft.Json版本10.0.3在当前项目中:
这不是真实的,因为当我在bin文件夹中构建解决方案时,它存储的版本为8.0.3 ,并且不能更新Newtonsoft.Json,因为它“已经”更新。
而且我的项目和LibB需要的vesion 10实际使用版本8我无法决定自动保持10版,其实我有合并和正确的手动所有的.config和的.csproj档案!
有没有办法避免这种噩梦?
额外信息。
该项目和LibB在.Net 4.7上设置。
LibA仍然在.Net 4.5上。
LibA和LibB部署在公司的NuGet存储库中。
[更新]
正如意见,我会尽量不要在力霸(和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在其自己的nupkg文件btw中包含Newtonsoft.Json.dll,这可能是导致问题的原因。 –
你可以重写liba nuget包来引用newtonsoft Json而不是复制DLL吗? – dariogriffo