VS2017 - Консолидация Newtonsoft.Json.dll (но это также может быть любой пакет с различными версиями nuget) - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть решение где-то в районе 60 проектов, большинство из которых использует Newtonsoft.Json.dll и многие из которых ссылаются друг на друга.Все шло хорошо, предупреждений не было.

Взглянул на функцию Consolidate в менеджере пакетов слепков, и это оказалось весьма полезным - несколько проектов, использующих разные версии Newtonsoft, можно было бы быстро упорядочить, чтобы все могли использоватьта же версияБольшинство проектов используют одну и ту же версию, некоторые опередили несколько несовершеннолетних, некоторые отстали от одной основной версии.Нажмите кнопку «Готово», все проекты теперь имеют одинаковую версию и ссылки.По-видимому.

Появляются предупреждения о нахождении разных конфликтующих версий одной и той же сборки, поэтому я решил найти все файлы Newtonsoft.Json.dll в дереве проекта и стереть их, а также стереть solutiondir \ packages \ Newtonsoft.Jsonпапку, затем выполните восстановление пакета и перестройте решение ..

Как ни странно, это, похоже, не помогло. Я искренне думал, что очистка старых версий и наличие NPM делают каждый проект в решениина одной и той же версии, это означало бы, что не было 9 разных версий, но достаточно уверенно, что поиск dll приводит к поиску файлов разных размеров по всему дереву решений

Как правильно обращатьсяэто и убрать предупреждения о конфликтующих сборках после консолидации?

1 Ответ

0 голосов
/ 21 ноября 2018

Мне удалось разрешить предупреждения для моего контекста, после того, как я понял, что многие проекты в решении имели перенаправление привязки веб-конфигурации, которое требовало перенаправления 0.0.0.0-6.0.0.0 для Newtonsoft.Json на 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;убедитесь, что ваши перенаправления привязки ссылаются на версию библиотеки, доступную в проекте

...