Как передать это общее свойство в MSBuild с помощью TeamCity? - PullRequest
14 голосов
/ 11 января 2012

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

/Property:FileAlignment=4096

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

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

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

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

Есть 3 вида:

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

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

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

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

Ответы [ 4 ]

14 голосов
/ 11 июля 2012

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

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

Имя: system.FileAlignment

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

Значение: 4096

Обратите внимание, что TeamCity будет настаивать на «системе». префикс. Это не имеет значения, потому что скрипт MSBuild все равно будет видеть его как $ (FileAlignment).

4 голосов
/ 12 января 2012

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

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

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

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

Это свойство /FileAlignment представляется специальным свойством , которое автоматически содержится в любом файле .csproj. Так что тебе должно быть хорошо идти. Вы можете проверить фактические параметры, которые были переданы в сборку, нажав на любую сборку и просмотрев вкладку «Параметры сборки». Есть раздел, который показывает «Фактические параметры на агенте».

1 голос
/ 25 июня 2012

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

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

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

/Property:FileAlignment=filealignment v:diag

Затем на вкладке вывода параметров сборки будет отображаться:

User Defined Parameters
Name                    Value passed to build
system.filealignment    512
system.verbosity        diagnostic
0 голосов
/ 13 января 2012

(это -754 символа для комментария, поэтому должны быть напечатаны как пост)

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

Никакие параметры, которые я указываю в элементе графического интерфейса пользователя (/ шаг сборки / параметры командной строки /), не появятся на вкладке / параметры сборки /.Конечно, некоторые не будут компилироваться вообще.

Также у меня есть еще более странное поведение, когда использование / verbosity: диагностика vs / verbosity: минимальная приводит к увеличению журнала сборки для минимального!Похоже, что диагностика скрывает детали внутри специальной задачи, которая является частью 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, предположительно) древовидным форматом.

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

...