首页 > 解决方案 > VS2017 - 整合 Newtonsoft.Json.dll (但它可以很容易地成为任何不同版本的 nuget 包)

问题描述

我有一个大约有 60 个项目的解决方案,其中大多数使用 Newtonsoft.Json.dll 并且其中许多相互引用。事情进展顺利,没有任何警告。

看了一下 nugget 包管理器的 Consolidate 功能,它似乎非常有用 - 使用不同版本的 Newtonsoft 的多个项目可以快速规范化为都使用相同的版本。大多数项目使用相同的版本,有些项目领先几个小版本,有些项目最多落后一个主要版本。单击单击完成,所有项目现在都安装和引用了相同的版本。显然。

出现有关查找同一程序集的不同冲突版本的警告,因此我决定在项目树下查找每个 Newtonsoft.Json.dll 并删除它们,并删除 solutiondir\packages\Newtonsoft.Json 文件夹,然后进行打包恢复并重建解决方案..

奇怪的是,它似乎没有帮助.. 我真的认为清除旧版本并让 NPM 使解决方案中的每个项目都使用相同的版本,这意味着它没有 9 个不同的版本,但是果然搜索 dll 会在解决方案树中找到不同大小的文件

什么是正确的方法来处理这个问题并消除关于合并后组件冲突的警告?

标签: c#visual-studio-2017nuget-packagenuget-package-restoreconflicting-libraries

解决方案


在意识到解决方案中的许多项目都有一个 Web 配置绑定重定向要求将 Newtonsoft.Json 的 0.0.0.0-6.0.0.0 重定向到 6.0.0.0 之后,我能够解决针对我的上下文的警告

安装的版本(5.0.2)的程序集版本为 4.5.0.0,我能找到的第一个程序集版本为 6.0.0.0 而不是调整绑定重定向,而是使用 NPM 升级所有 Newtonsoft.Json到 v6.0.1,随后所有对它的项目引用都依赖于它的 6.0.0.0 的程序集版本

因此,我假设当绑定重定向指定解决方案中不存在的库版本,并且在其他地方成功资助时,其他版本可能会成为与本地引用的版本冲突的版本。

编辑:NuGet 包管理器(控制台)/Powershell 似乎也可以使用以下命令规范绑定重定向:

Get-Project –All | Add-BindingRedirect

更多信息:https ://weblog.west-wind.com/posts/2014/Nov/29/Updating-Assembly-Redirects-with-NuGet

TLDR;确保您的绑定重定向引用项目中可用的库版本


推荐阅读