Скрытые возможности 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'">

Это на самом деле не скрытая особенность, но я думаю, что пакетирование очень эффективно, когда его понимают.

Для получения дополнительной информации вы можете прочитать мои соответствующие записи в блоге по адресу:

Сказал Ибрагим Хашими

Моя книга: Внутри 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, а затем включаем общие цели. Это гарантирует, что все наши сборки будут выполнять один и тот же набор задач анализа и сэкономит нам время на написание скриптов.

Другие вопросы по тегам