Как создать файл пакета nuget на уровне решения в основном проекте .NET - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть решение с несколькими проектами, и у каждого из них есть свой собственный пакет nuget.Я хочу найти способ сделать один файл nuget для всего решения, чтобы избежать разных версий одной и той же проблемы двоичных файлов.

Любой, кто делал это раньше, может поделиться указателями.

1 Ответ

0 голосов
/ 29 сентября 2019

Если у вас уже установлена ​​другая версия пакетов nuget, вы можете использовать Закладка консолидации в диспетчере пакетов для их консолидации.

Это не заставит участников группы использовать консолидированную версию, хотя кто-то все еще может установить другую версию.Если у вас небольшая команда, автоматическое применение может быть излишним, и вы можете применить ту же версию, обучив свою команду и во время проверки кода.Если у вас большой проект и над ним работают несколько команд, я настоятельно рекомендую написать тест или шаг до / после сборки, который отсканирует ваше решение и обеспечит реализацию всех проектов, использующих одну и ту же версию пакетов.

Я не знаю, существует ли какой-либо существующий пакет / инструмент, поэтому, пожалуйста, найдите несколько возможных решений ниже:

Поиск пакетов путем разбора файлов

Просто для поиска PackageReference элементов в csproj файлы и синтаксический анализ package.config, если существует, чтобы найти все ссылочные проекты, а затем убедиться, что нет разных версий.

Это простой вариант, но вы все равно можете получить dll ад из-за переходных зависимостей,Например: вы устанавливаете Newtonsoft.Json 12.0.0 в свое решение, а затем добавляете Hangfire.PostgreSql 1.6.3 в какой-то проект, который транзитивно приносит Newtonsoft.Json 10.0.1.

отчет о пакете списка точек

Вы можете использовать dotnet list package длясоздать отчет со всеми установленными пакетами.Если вы используете флаг --include-transitive, то вы можете определить потенциальные несовместимые версии транзитивных зависимостей.К сожалению, вы ничего не можете сделать в этом случае: либо использовать другую версию корневого пакета, которая использует тот же пакет, который вы используете в своем решении, либо просто расслабиться и полагаться на BindingRedirect s, которые автоматически генерируются во время установки пакета.

...