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

StackOverflow https://stackoverflow.com/questions/8810860

  •  26-10-2019
  •  | 
  •  

Вопрос

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

/Property:FileAlignment=4096

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

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

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

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

Есть 3 вида:

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

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

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

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

Это было полезно?

Решение 3

Это было решено. Чтобы уточнить, Энтони сказал, как решить проблему в командной линии, используя 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

Другие советы

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

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

Имя: System.fileAlignment

Тип: Свойство системы (Система.)

Значение: 4096

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

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

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

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

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

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

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

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

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

Кроме того, у меня есть еще более странное поведение, где использование /условно: диагностика против /словесность: минимальный вызывает более длительный журнал сборки для минимального! Похоже, что диагностика скрывает детали внутри специальной задачи, которая является частью команды, а не я; [16:24:05]: переопределение цели "SatellitedLlsProjectOutputGroup" в проекте "C: Windows Microsoft.net Framework v3.5 Microsoft.common.targets" с Target "SatellitedLsProjectOutputGroup" из проекта "c: windows Microsoft.net Framework v3.5 microsoft.winfx.targets ". Я борюсь с этим, потому что журнал вывода, сгенерированного командой, настолько хорош, чтобы иметь как дерево. Это работает со сборкой SLN, но использование любого файла BAT не может создать файл журнала с симпатичным (XML, предположительно) форматом дерева.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top