Как передать это общее свойство MSBuild с помощью TeamCity?
Я использую Runner TeamCity Visual Studio. Я хочу добавить параметр, недоступный из Visual Studio.
/Property:FileAlignment=4096
Я набрал это непосредственно на этапе сборки "Параметры командной строки". Журнал сборки показывает ошибку:
Параметры командной строки MSBuild содержат параметры "/property:" или "/p:". Вместо этого используйте Build Parameters.
Я не понимаю, как предоставить это MSBuild из TeamCity и избавиться от этого предупреждения!
1. Какой параметр я должен использовать?
Есть 3 вида:
- Параметры конфигурации
- Свойства системы
- Переменные среды.
Мне не нужна переменная среды или системы, потому что я не хочу, чтобы эта сборка зависела от чего-либо внешнего. Я собираюсь попробовать Config прямо сейчас, но тогда я не уверен, что правильно заполняю его.
2. Как я могу сказать, что этот параметр действительно используется?
В журнале построения, который, по-видимому, имеет только навигационные/складные xml-подобные уровни с их программой, не сказал параметры сборки.
Ответы
Ответ 1
Это было решено. Чтобы уточнить, Энтони рассказал, как решить проблему в командной строке, используя 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
Ответ 2
Вы должны использовать "Свойства системы". Не беспокойтесь о названии, просто как TeamCity называет его. Они являются регулярными свойствами. Вы можете добавить их в "Редактировать настройки конфигурации > 7. Сборка параметров".
Например, вы можете добавить системное свойство следующим образом:
Имя: system.FileAlignment
Тип: Системное свойство (система.)
Значение: 4096
Обратите внимание, что TeamCity будет настаивать на "системе". префикс. Это не имеет значения, потому что MSBuild script будет по-прежнему видеть его как $(FileAlignment).
Ответ 3
Документация TeamCity определяет параметры сборки как "удобный способ передачи общих или относящихся к среде параметров в сборку script" . Параметры конфигурации предоставляют возможность переопределить некоторые параметры в конфигурации сборки, унаследованные от шаблона. Они никогда не передаются в сборку. Параметры системы и среды предоставляются в вашей сборке script. Переменные среды фактически установлены в системе (я не могу найти для этого никакой документации). Системные параметры переданы движку script.
TeamCity автоматически предоставляет системные переменные фактической командной строке (похоже, что бегун Visual Studio работает msbuild.exe
, а не devenv.exe
). Я предполагаю, что TeamCity создает команду типа
cmd> msbuild.exe my-solution.sln /p:FileAlignment=4096
Я попробовал это в своей командной строке, чтобы убедиться, что он должен работать (я добавил флаг /v:diagnostic
). Диагностическая многословность позволяет msbuild печатать все его свойства на консоли. Я проверил, что там был FileAlignment=4096
.
Свойство /FileAlignment
выглядит как специальное свойство, которое автоматически в любом файле .csproj
. Поэтому вам должно быть хорошо идти. Вы можете проверить фактические параметры, которые были переданы в сборку, щелкнув любую сборку и просмотрев вкладку "Параметры сборки". Там раздел, который показывает "Фактические параметры для агента".
Ответ 4
(Это -754 символов для комментария, поэтому его нужно ввести в качестве сообщения)
Привет Антоний, Спасибо, что ответили!
Да, msbuild в командной строке отлично работает и для меня, и файлы проекта могут хранить свойства FileAlignment. В нашем случае, при обсуждении с Microsoft, представляется необходимым, чтобы я определял также широкомасштабное выравнивание по ширине решения, то есть в аргументах команды, помимо исправления проектов (которые я уже сделал).
Никакой параметр, который я укажу в элементе графического интерфейса (/Строка/Параметры командной строки /), не появится на вкладке/Сборка параметров /. Конечно, некоторые не будут компилироваться вообще.
Также у меня есть еще более странное поведение, когда
/Подробность: диагностические
против
/Подробность: минимальный
вызывает более длинный журнал построения для минимального! Кажется, диагностика скрывает детали внутри специальной задачи, которая является частью 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, предположительно) древовидным форматом.
Если у вас есть другие идеи, я буду рад услышать их и поблагодарить за ваши изменения!:)