OctoPack не заполняет заполнители в файле nuspec

У меня есть решение со многими проектами, около дюжины из которых имеют установленный Octopack, и пакеты создаются правильно, когда TeamCity запускает msbuild /p:RunOctoPack=true /p:OctoPackEnforceAddingFiles=true. Как вы, наверное, поняли по флагу p:/OctoPackEnforceAddingFiles, каждый проект с установленным Octopack также имеет файл nuspec.

Проблема заключается в том, что Octopack не учитывает заполнители nuspec, как указано в https://docs.microsoft.com/en-gb/nuget/reference/nuspec#replacement-tokens. Прямо сейчас мы хотим использовать $id$, которое должно совпадать с именем сборки упаковываемого проекта. Вместо этого, когда мы запускаем Octpack, этот токен $id$ пуст.

Я могу видеть на https://octopus.com/docs/packaging-applications/creating-packages/nuget-packages/using-octopack#UsingOctoPack-Replacementtokens, что Octopack позволяет вручную переопределять эти токены, но это не помогает мне, так как Octopack запущен на решение, но мне нужно название проекта, который упаковывается.

Что я могу сделать, чтобы обойти эту проблему? На данный момент у нас, по сути, есть имя проекта, жестко закодированное в файлах nuspec, но оно становится хрупким и громоздким, и мы хотели бы это исправить.


person Richiban    schedule 07.03.2018    source источник


Ответы (2)


У меня это работает, добавив следующее в файл csproj

  <PropertyGroup>
      <OctoPackNuGetProperties>id=$(AssemblyName)</OctoPackNuGetProperties>
  </PropertyGroup>

Это передает имя сборки как идентификатор в Octo.exe, который, в свою очередь, передает его в NuGet.exe через свой аргумент -Properties.

person Shannon Lewis    schedule 08.03.2018

Пробовали ли вы вообще не предоставлять раздел $id$ в NuSpec? Octopack должен попытаться сгенерировать его (он знает к чему он применяется)?

Альтернативой может быть использование события предварительной сборки с макросом $(ProjectName) для обновления соответствующих nuspecs. В вашем случае, в зависимости от вашего процесса сборки, потенциально придерживайтесь процесса предварительной сборки решения для обновления всех nuspec.

P.S. Лично я отказался от Octopack и в настоящее время использую Fake (F# Make).

person Alex M    schedule 08.03.2018
comment
Спасибо за ваш ответ @Alex M. Я смутно знаком с Fake, но мне любопытно, как это может заменить Octopack? Насколько я могу себе представить, даже если бы мы использовали Fake для нашего процесса сборки, конвейер Fake все равно вызывал бы Octopack в какой-то момент. - person Richiban; 09.03.2018
comment
Примечание: я не призываю вас прекратить использование Octopack, так как это может потребовать некоторых усилий по настройке, но в основном octopack — это просто оболочка для nuget.exe. Если вы избавитесь от него, то все, что вам нужно сделать, это вручную запаковать необходимые файлы, где Fake ближе к нативному подходу. - person Alex M; 09.03.2018