Как передать это общее свойство MSBuild с помощью TeamCity?

Я использую TeamCity Visual Studio runner. Я хочу добавить параметр, который недоступен из Visual Studio.

/Property:FileAlignment=4096

Я ввел это непосредственно в параметры командной строки "шаг сборки"."Журнал сборки показывает ошибку:

параметры командной строки MSBuild содержат параметры" /property: "или" /p:". Вместо этого используйте параметры сборки.

Я не понимаю, как предоставить это MSBuild из TeamCity и избавиться от это предупреждение!

1. Какой параметр следует использовать?

есть 3 вида:

  • параметры конфигурации
  • свойства системы
  • переменные среды.

Я не хочу, чтобы среда или системная переменная, потому что я не хочу, чтобы эта сборка зависела от чего-либо внешнего. Я собираюсь попробовать Config прямо сейчас, но тогда я не уверен, что заполняю его правильно.

2. Как я могу сказать этот параметр действительно используется?

журнал сборки, который, похоже, имеет только навигационные/складные xml-подобные уровни с их программой, не сказал параметры сборки.

4 ответов


вы должны использовать "свойства системы". Не беспокойтесь о названии, именно так его называет TeamCity. Они являются регулярными свойствами. Вы можете добавить их в " Изменить параметры конфигурации > 7. Параметры Сборки".

например, вы можете добавить системное свойство следующим образом:

название: системы.FileAlignment

тип: системное свойство (system.)

значение: 4096

обратите внимание, что TeamCity будет настаивать на "система." префикс. Это не имеет значения, потому что сценарий MSBuild по-прежнему будет видеть его как $(FileAlignment).


В TeamCity документация определяет параметры как "удобный способ передачи общих или специфичных для среды настроек в скрипт сборки". Параметры конфигурации позволяют переопределить некоторые параметры в конфигурации сборки, унаследованной от шаблона. они никогда не передаются в сборку. Параметры системы и среды предоставляются сценарию сборки. Переменные среды фактически установлены в системе (я не могу найти любая документация для этого). Параметры системы передано в движок скрипта.

TeamCity автоматически предоставляет системные переменные в фактическую командную строку (похоже, что Visual Studio runner работает msbuild.exe, а не devenv.exe). Я думаю, что TeamCity строит команду

cmd> msbuild.exe my-solution.sln /p:FileAlignment=4096

я попробовал это в своей командной строке, просто чтобы убедиться, что это должны работа (я добавил /v:diagnostic флаг). Диагностическая многословность делает msbuild распечатает все его свойства на консоли. Я проверил это FileAlignment=4096 там.

это /FileAlignment свойство кажется особое свойство это автоматически в любой . Так что ты можешь идти. Вы можете проверить фактические параметры, которые были переданы в сборку, нажав на любую сборку и просмотрев вкладку "параметры сборки". Существует раздел, который показывает "фактические параметры агента".


Это было решено. Чтобы уточнить, Энтони рассказал, как решить проблему в командной строке с помощью MSBuild. Его также можно решить в командной строке с помощью devenv, за билет с Microsoft, синтаксис:

 devenv ..\..\mysolution.sln /Rebuild /Property:Config=Release;Platform=AnyCPU;Filealignment=512

однако я хотел, чтобы "Visual Studio Build" Teamcity принял этот параметр. Это было достигнуто следующим образом. В поле для параметров командной строки я ввел:

/Property:FileAlignment=filealignment v:diag

затем вкладка вывод для параметров сборки показывает:

User Defined Parameters
Name                    Value passed to build
system.filealignment    512
system.verbosity        diagnostic

(Это -754 символа для комментария, поэтому его необходимо ввести как сообщение)

привет Энтони, Спасибо за ответ! Да, msbuild в командной строке отлично работает и для меня, и файлы проекта могут хранить свойства FileAlignment. В нашем случае, после обсуждения с Microsoft, кажется необходимым, чтобы я указал общесистемное решение aka build-wide alignment, т. е. в аргументах команды, в дополнение к фиксации проектов (что я уже сделал).

нет параметра, который я укажите на графическом интерфейсе пункт (/Build Step / параметры командной строки/) появится на вкладке /Build Parameters/. Конечно, некоторые не будут компилироваться вообще.

также у меня еще более странное поведение при использовании / многословие: диагностика против / многословие: минимальное вызывает более длинный журнал сборки для минимального! Похоже, диагностика скрывает детали внутри специальной задачи, которая является частью Teamcity, а не мной; [16: 24: 05]: переопределение цели "SatelliteDllsProjectOutputGroup" в проекте "C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets" с целью "SatelliteDllsProjectOutputGroup" из проекта "C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets". Я борюсь с этим, потому что созданный Teamcity журнал выходных данных сборки так приятно иметь в качестве TreeView. Это работает с построением SLN, но использование любого файла bat не может создать файл журнала с красивым (xml, предположительно) древовидным форматом.

Если у вас есть дальнейшие идеи, я буду рад их услышать, и спасибо за ваши правки! :)