Проблема управления версиями с локальными пакетами сервера NuGet - PullRequest
0 голосов
/ 25 апреля 2018

Некоторые предыстории:
В моей компании последние несколько месяцев я работал над преобразованием наших библиотек C # для работы с ссылками .dll, а не с проектов на ссылки на проекты.Для этого мы создали локальный сервер NuGet, который содержит пакеты NuGet для всех наших библиотечных проектов.У нас есть задания Jenkins, настроенные для каждого проекта, который создает новые пакеты NuGet и добавляет их на сервер каждый раз, когда вносится изменение в один из них.

Для работы над одним проектом эта система прекрасно работает.Вам нужно только позаботиться об обновлении папки с пакетами с помощью диспетчера NuGet в Visual Studio, а все остальное - просто написание кода и сборка.

Проблема:
Когда вы добавляете новую ссылку или обновляете свои пакеты через NuGet, NuGet автоматически указывает конкретную версию проекта, которую вы выбрали в NuGet.В текущей системе, которую я установил, пересборка проекта локально заменит его .dll в папке пакетов, чтобы все проекты, ссылающиеся на него, могли видеть эти новые изменения, которые вы тестируете.Однако проблема заключается в том, что локально созданные проекты имеют версию, отличную от наших пакетов Jenkins.Наши локальные сборки используют систему управления версиями, отличную от наших сборок Jenkins, так что вы можете легко определить, было ли что-то построено с использованием Jenkins или некоторые из DLL были получены из сборки разработчика.Из-за этой другой схемы управления версиями ссылка проектов на проект прерывается, потому что новый .dll, созданный локально, имеет версию, отличную от .dll, полученной с сервера NuGet.

Текущее решение:
На данный момент я решил эту проблему путем добавления шага перед сборкой.Перед сборкой каждого проекта он вызывает один из моих сценариев PowerShell, который проходит через него и добавляет <SpecificVersion>False</SpecificVersion> к каждой ссылке проекта в файле .csproj создаваемого проекта.Это решает проблему, но только в том смысле, что на нее накладывают повязку.Вместо того чтобы иметь дело с последствиями системы, я хотел предупредить их заранее, чтобы это не требовалось каждый раз при сборке проекта.Я много пытался исследовать конкретные проблемы с версиями пакетов NuGet, но не смог найти в Интернете ничего, даже отдаленно близкого к тому, о чем я спрашиваю.Это заставляет меня думать, что я ошибаюсь.

Вопрос:
Что я могу сделать, чтобы решить эту проблему?Или я делаю что-то очень неправильное и глупое, чего можно легко избежать с помощью другой системы?Любые предложения или советы будут с благодарностью

...