c# - VS2017 - 整合 Newtonsoft.Json.dll (但它可以很容易地成为任何不同版本的 nuget 包)
问题描述
我有一个大约有 60 个项目的解决方案,其中大多数使用 Newtonsoft.Json.dll 并且其中许多相互引用。事情进展顺利,没有任何警告。
看了一下 nugget 包管理器的 Consolidate 功能,它似乎非常有用 - 使用不同版本的 Newtonsoft 的多个项目可以快速规范化为都使用相同的版本。大多数项目使用相同的版本,有些项目领先几个小版本,有些项目最多落后一个主要版本。单击单击完成,所有项目现在都安装和引用了相同的版本。显然。
出现有关查找同一程序集的不同冲突版本的警告,因此我决定在项目树下查找每个 Newtonsoft.Json.dll 并删除它们,并删除 solutiondir\packages\Newtonsoft.Json 文件夹,然后进行打包恢复并重建解决方案..
奇怪的是,它似乎没有帮助.. 我真的认为清除旧版本并让 NPM 使解决方案中的每个项目都使用相同的版本,这意味着它没有 9 个不同的版本,但是果然搜索 dll 会在解决方案树中找到不同大小的文件
什么是正确的方法来处理这个问题并消除关于合并后组件冲突的警告?
解决方案
在意识到解决方案中的许多项目都有一个 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;确保您的绑定重定向引用项目中可用的库版本
推荐阅读
- javascript - 如何修复未捕获的 TypeError:无法在 wordpress 中的 javascript 中设置 null 的属性“innerHTML”?
- core-data - CoreData 同一个对象有不同的 URIRepresentations
- flutter - 如何从数据库颤动中选择更大或最大的 id
- c++ - 从 ns3 中的流监视器生成的 xml 文件中提取有关 rts、cts 和 ack 的信息
- python-3.x - Python使用lambda函数创建if-else条件和for循环的一行语句
- react-native - React-native:node_modules\@react-native-community\masked-view 中缺少 index.js 文件
- php - 我如何创建一个可以从任何文件访问的全局 php 变量
- sql-server - 连接到 SQL Server - 通过 Visual Studio Server Explorer 的“登录失败”,在 SSMS 中工作
- tensorflow - 使用opencv预处理测试图像进行预测
- javascript - 生成最大值和最小值之间的数字数组,间隔为 2 个值