Скрытые возможности msbuild
У меня есть интерес к msbuild на этой неделе. Я убираю много чрезвычайно сложных скриптов сборки. Раскопки меня удивляют, как много он может сделать - msbuild - это своего рода скрытая особенность программирования.NET сама по себе.
В соглашении SO, что вопросы должны иметь ответы, через несколько дней или неделю я отмечу наиболее полезные или самые крутые скрытые функции как принятые.
let bestAnswer suprise slick useful = (surprise + slick + 2*useful)
Определение полезного: я обновляю существующие сценарии msbuild, которые включают: пакеты (zip-файлы) веб-сайтов и утилит, интеграцию с CC.NET, запуск тестов (UT + selenium), сборку баз данных. Я добавляю (новые цели, еще более полезные): развертывание на виртуальных серверах VMWare, цепочки сборки (быстрая сборка сразу, медленные тесты в очереди). Если вы ссылаетесь на внешнюю библиотеку (например, задачи сообщества MSBuild), было бы неплохо узнать, как ее получить.
Некоторые сюрпризы msbuild я уже нашел.
- Привет мир, используя задачу сообщения и свойства.
- Использование msbuild в качестве установщика для чрезвычайно сложного серверного продукта. Задачи сообщества MSB управляли настройкой сервера IIS. Задачи WriteLinesToFile и XmlUpdate записывают файлы конфигурации для конкретного сервера. Если вы работаете с MSI, вы будете знать, что для установки лучше всего MSI.
- Для новичков: файлы CSProj и Vbproj такие же, как и файлы msbuild proj. Для непосредственного редактирования: выгрузите ваш csproj или vbproj, затем щелкните правой кнопкой мыши проект и выберите редактировать. Это приятнее и эффективнее, чем работа с неуклюжими событиями до и после сборки.
- MSBuild поставляется с общей установкой.NET. В отличие от других модных инструментов, вы можете использовать его на абсолютно чистом сервере / рабочем столе.
Вот msbuild Hello World После того, как я написал его, я нашел привет MSDN.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build;Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Who>World</Who>
</PropertyGroup>
<Target Name="Hello">
<Message Text="Hello, $(Who)" Importance="high" ></Message>
</Target>
<Target Name="Build" DependsOnTargets="Hello"/>
<Target Name="Test"/>
</Project>
5 ответов
MSBuild имеет ряд приятных функций. мне нравится
рекурсивные спецификации файлов
<Files Include="$(src)\**\*.cs" Exclude="$(src)\**\*test.cs" />
Метаданные дозирования и позиции
<ItemGroup>
<F Include="SampleApplication.t">
<Version>1</Version>
</F>
<F Include="SampleApplication2.t">
<Version>1</Version>
</F>
<F Include="SampleApplication3.t">
<Version>2</Version>
</F>
</ItemGroup>
<Target Name="Build">
<Touch Files="%(F.FullPath)" AlwaysCreate="True"
Condition=" '%(F.Version)' > '1' ">
<Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/>
</Touch>
<Message Text="Created files = @(CreatedFiles)"/>
<Message Text="%(F.Identity) %(F.Version)"/>
</Target>
Анализ зависимостей на целевом уровне
<Target Name="Build"
Inputs="@(MyItems)"
Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'">
Это на самом деле не скрытая особенность, но я думаю, что пакетирование очень эффективно, когда его понимают.
Для получения дополнительной информации вы можете прочитать мои соответствующие записи в блоге по адресу:
- MSBuild дозирования часть 1
- MSBuild Batching Part 2
- MSBuild Batching Part 3
- MSBuild RE: применение агента сборки в групповой сборке
Сказал Ибрагим Хашими
Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build
Используйте параметр командной строки /M, чтобы разрешить использование всех доступных ядер ЦП.
Я обнаружил, что пакет расширений MSBuild невероятно полезен. Документация очень хорошо организована и легко найти необходимую информацию.
У них есть раздел по настройке intellisense для файлов сборки, который можно найти здесь
У Attrice есть невероятный инструмент, который я часто использую, если мне нужно работать над сценариями сборки. Что стоит попробовать, так это то, что у него есть отладчик, который покажет вам зависимые задачи, когда он выполняет ваш скрипт сборки, с переменными auto и watch, пока он выполняет скрипт сборки. Microsoft Build Sidekick v2.3
При установке SVN в тихое состояние я чувствую, что значительно увеличил скорость процесса сборки. Добавление следующего к вашему MSBuild.Community.Tasks.Subversion.SvnExport запустит сборку без регистрации каждого файла, который он получает из SVN
Аргументы ="- force -q"
Вы можете ссылаться на один файл msbuild из другого. Все наши цели, например, для запуска NCover, SourceMonitor, Duplo и т. Д., Находятся в общем файле целей. Для каждого проекта мы создаем файл msbuild с разделами PropertyGroup и ItemGroup, а затем включаем общие цели. Это гарантирует, что все наши сборки будут выполнять один и тот же набор задач анализа и сэкономит нам время на написание скриптов.