2

У нас есть комплексное решение Visual Studio с проектами, ссылающимися на те же пакеты NuGet разных версий.Запретить использование нескольких версий пакетов NuGet в решении

Я считаю, что это плохая практика, поскольку потенциально может привести к дллов ад

Так что - есть способ контролировать это?

В идеале это должно быть частью либо:

  • решение строить
  • TFS GaTeD используется регистрация
  • доставки трубопровода в любой CI \ инструмент CD.

Мне очень понравилось Package Manager Console Powershell Reference. Но я не мог найти способ использовать эти командлеты (Get-Package и Get-Project -All) во внешнем скрипте Powershell вне VS.

Самое простое решение, которое я вижу, это написать собственный Powershell скрипт, который читает .sln файл, получает все проекты, и для каждого из них читает packages.config и принимает все пакеты NuGet версии оттуда.

Или ... используйте VS DTE, чтобы упростить эту работу, но до сих пор у меня не было опыта ее использования.

И тогда ... как только у нас есть этот скрипт - мы можем запустить его в CI.

Есть ли более простой и стандартный способ?

ответ

1

Вы не должны беспокоиться о нескольких компонентах, ссылающихся на разные версии пакетов. NuGet был построен для удовлетворения этого сценария.

С DLL-адом вы не знали, может ли A.DLL работать с новой версией B.DLL. Но с NuGet зависимость явно указывается с рядом совместимых номеров версий.

Разрешающая версия используется NuGet, чтобы всегда выбрать самую низкую версию зависимости, которая помещается в диапазоне.

Читайте здесь для деталей, объясняет это хорошо:

http://blog.davidebbo.com/2011/01/nuget-versioning-part-2-core-algorithm.html

+1

demoncodemonkey, спасибо за ответ и полезную ссылку. Хотя он не отвечает на мой первоначальный вопрос, он, безусловно, помогает понять, как работает NuGet.Мне нужно будет погрузиться в него глубже, но на данный момент я не понимаю ничего: почему я получаю несколько версий пакетов, загружаемых в каталог dir во время NuGet RestorePackages, если NuGet автоматически выбирает единственную версию, которая подходит для всех проектов ссылок. , – Ivan

1

По крайней мере, насколько NuGet обеспокоен, NuGet могут устанавливать различные версии пакетов в различных проектах. Тем не менее, это нецелесообразно. Что касается восстановления пакетов, он смотрит на файл пакетов (XML), что-нибудь в файле будет восстановлено.

Этот файл может выйти из строя в зависимости от того, как ссылки на пакеты были удалены из проекта/решения.

Смежные вопросы