GitVersionTask v4 с проектом только для MSBuild - PullRequest
0 голосов
/ 12 ноября 2018

Этот вариант использования может быть немного не по назначению, но я надеюсь, что кто-то может мне помочь ...

В течение ряда лет я поддерживал «библиотеку» команд MSBuild - в файле, который мы будем называть CommonTasks.targets, который распространяется через наш внутренний сервер NuGet - который выполняет различные задачи, необходимые для проектов моей компании. В течение последних нескольких лет я использовал GitVersion v3 вместе с ним как для генерации собственных номеров версий пакета NuGet библиотеки, так и для непосредственного использования цели GitVersion GetVersion MSBuild (например, при создании соответствующего тега git), чтобы избежать необходимости извлечь сгенерированную GitVersion версию из сборки зависимого проекта после сборки.

Ранее (с GitVersion v3) все, что требовалось, чтобы мой файл CommonTasks.targets импортировал файл GitVersionTask.targets, расположенный в пакете NuGet GitVersion на \build\dotnet\GitVersionTasks.targets. Этот целевой файл в свою очередь выполнил необходимые команды UsingTask (в частности, GitVersionTask.GetVersion), которые затем позволили мне вызвать <GetVersion ...> в моем собственном файле .targets после импорта.

В версии 4 GitVersionTask ввел зависимость от UtilPack.NuGet.MSBuild (который я собираю, помогает с различными командами NuGet). Начнем с того, что это означало, что мне нужно было импортировать UtilPack.NuGet.MSBuild.props файл, иначе GitVersionTask не загрузится вообще. Однако после этого я получаю неожиданные ошибки при попытке вызвать GetVersion из файла MSBuild. По-видимому, цель GetVersion теперь пытается запросить все мои определенные репозитории NuGet (nuget.org, локальные кэши, сервер нашей компании и т. Д.) Для упакованной версии моей библиотеки, и в конце я приветствую эту ошибку:

  MSBUILD : NuGetTaskRunnerFactory error NR0001: [NuGet Error]: Unable to find package CommonTasks with version
 (>= 1.37.0-gitversiontask4-0001) [C:\redacted\CommonTasks\Build.proj]
MSBUILD : NuGetTaskRunnerFactory error NR0001:   - Found 108 version(s) in Source1 [ Nearest version: 1.36.3 ] [C:\redacted\CommonTasks\Build.proj]
MSBUILD : NuGetTaskRunnerFactory error NR0001:   - Found 42 version(s) in Source2 [ Nearest version: 1.36.3 ] [C:\redacted\CommonTasks\Build.proj]
MSBUILD : NuGetTaskRunnerFactory error NR0001:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages [C:\redacted\CommonTasks\Build.proj]
MSBUILD : NuGetTaskRunnerFactory error NR0001:   - Found 0 version(s) in nuget.org [C:\redacted\CommonTasks\Build.proj]
  MSBUILD : Task factory error NMSBT003: Failed to find main package CommonTasks@. [C:\redacted\CommonTasks\Build.proj(47,9): error MSB4175: The task factory "Ut
ilPack.NuGet.MSBuild.NuGetTaskRunnerFactory" could not be loaded from the assembly "C:\redacted\CommonTasks\packages\UtilPack.NuGet.MSBuild.2.7.0\build\\net46\UtilPack.NuGet.MSBuild.dll". Object ref
erence not set to an instance of an object.

Чего я не понимаю, так это того, почему он вообще пытается получить NuGet, и, даже если это новое поведение по умолчанию, я не знаю, как это отключить или запретить, я не знаю, почему не работает. Я предполагаю, что ошибка должна быть как-то связана с тем, что это не обычный проект .NET (т.е. без исходного кода, кроме файла .targets, без файла .csproj и т. Д.). Но моя библиотека используется многими обычными проектами .NET, которые сами используют GitVersionTask для автоматического создания версий своих сборок.

Пока я прикрепил свою библиотеку к GitVersionTask v3, но очень хотел бы выяснить, как разрешить ей использовать v4, как я использовал ранее v3. Скорее всего, я мог бы переключиться на использование пакета GitVersion.CommandLine и анализ его выходных данных, но в конечном итоге мне нужны эти версии, сгенерированные GitVersion, в качестве свойств MSBuild, чтобы использовать их по назначению. А в зависимых проектах, в которых также используется GitVersionTask (не CLI), удобно использовать один пакет для обоих.

Есть ли способ исправить то, что я делаю с помощью GitVersionTask v4, или какой-то совершенно другой (возможно, более элегантный) способ добиться того, что я пытаюсь сделать?

...