Невозможно автоматически обновить пакет NuGet до последней версии во время сборки
У нас есть два отдельных решения .NET:
Запуск сборки для первого решения дает наш конечный продукт: кучу DLL. Эти DLL доставляются нашим клиентам через пакет NuGet.Второе решение служит решением для тестирования продукта: к нему устанавливается пакет NuGet, он создается и выполняется - таким образом, он использует наш продукт точно так же, как и наши клиенты.Проблема здесь заключается в том, что наш последний пакет NuGet должен автоматически устанавливаться в решение для тестирования продукта, предпочтительно во время сборки этого решения для тестирования продукта.
Основано на идеях изпохожий вопросЯ дошел до того, что настроил решение для тестирования продукта:
Сначала я включил восстановление пакета NuGet. Это позволяет мне полностью избавиться от каталога «packages» из VCS, поскольку пакет с версией, определенной в файле packages.config, будет автоматически загружаться NuGet перед сборкой.Затем я добавил следующее событие предварительной сборки в Visual Studio:$(SolutionDir).nuget\nuget update -prerelease $(ProjectDir)packages.config
, Это позволяет мне загружать последнюю версию нашего пакета NuGet во время сборки.В настоящее время я использую описанный выше сценарий для запуска локальных сборок с использованием Visual Studio и автоматических сборок с использованием TeamCity. На первый взгляд решение кажется подходящим для обоих сценариев, но на самом делеэто не дает ожидаемого результата: когда решение для тестирования продукта построено, вbin
Каталог Я не получаю последнюю версию DLL, только последнюю версию-1.
Проблема в том, что хотяnuget update
Команда обновляет все как ожидалось, включаяpackages.config
и.csproj
файл, ихновый контент не подобрана сборкой, поэтому - как я догадываюсь -HintPath настройки из.csproj
файл по-прежнему отражает состояние «до сборки», поэтому старые библиотеки DLL копируются вbin
каталог. Я предполагаю.csproj
файл обрабатывается только один раз: до запуска события предварительной сборки, а изменения, внесенные событием предварительной сборки, игнорируются до следующей сборки.
Я рассмотрел следующие решения:
По-видимому, предварительной сборки недостаточно. Если бы была еще более ранняя точка, я мог бы вставитьnuget update
команда, мое решение выше, вероятно, будет работать.Я прочитал, что могу переопределить HintPath-ы в файле .csproj, определив ReferencePath. Но я сомневаюсь, что смог бы легко найти правильный путь или я мог бы установить его достаточно рано, чтобы сборка его подобрала.В качестве обходного пути я мог запустить сборку дважды: дублировать шаг сборки для решения для тестирования продукта в TeamCity, и я всегда мог собрать решение дважды локально в Visual Studio.Кто-нибудь разобрался, как автоматически обновлять пакет NuGet до последней версии во время сборки?