Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

<Target Name="Test" DependsOnTargets="Build">
<CreateItem Include="$(TmpOutputPath)\*Test.dll">
<Output TaskParameter="Include" ItemName="TestAssembly" />
</CreateItem>
<Message Text="@(TestAssembly)"/>
<MakeDir Directories="$(ReportPath)"/>
<PropertyGroup>
<MsTestCommand></MsTestCommand>
</PropertyGroup>
<Exec Command='"$(MSTEST_HOME)\mstest.exe" /testcontainer:@(TestAssembly) /resultsfile:"$(ReportPath)\TestResult.trx"' IgnoreExitCode="true"/>
</Target>
Работа с файлами по маскам позволяет нам минимизировать объём работы по поддержке единожды написанных скриптов.Не вижу отличий от MSBuild. Кстати, десятая студия даже корректно работает, если с ее помощью открыть проект, где все файлы подключены «при помощи масок». Когда я игрался, она даже корректно добавляла новые файлы в проект (точнее, не добавляла их) и удаляла (точнее, удаляла с диска, но не с проекта). Впрочем, я именно что игрался и всех случаев мог не проверить, да и в 12й студии эта функциональность пропала — она постоянно норовит заменить какую-нидбуь маску на список файлов, а то и удалить ее втихую из проекта.
Наследование свойств между проектами позволяет нам не заботиться о явной передаче всех значений между проектами разных уровней. Например, легко организовать сбор всех результатов компиляции в одной папке на уровне Solution вместо размножения папок bin, obj в каждом отдельном проекте.В TFS такие свойства, как выходной каталог, прекрасно наследуются вдоль всей цепочки. Я уже забыл, как это было сделано, но такая возможность в msbuild точно есть.
Императивность работы NAnt позволяет легко модифицировать отдельные target'ы проектов по своему усмотрению. Реализация типовой задачки: скопировать помимо библиотек еще и пару самодельных конфигов при помощи BeforeBuild и AfterBuild событий (внутри них не используются задачи MSBuild, а обычно используются cmd- или Powershell-скрипты) смотрится «костыльной» по сравнению с явным использованием родной задачи NAnt copy.Хм, но кто мешает использовать родную для msbuild задачу copy в тех самых местах?
MSBuild ищет dll с зависимостями там, где они должны были оказаться после сборки проектов-зависимостейНу… да. Правда, если решить проблему с наследованием свойств, то эта проблема перестанет быть проблемой, поскольку dll с зависимостями окажутся именно там, где их будет искать msbuild.
В TFS такие свойства, как выходной каталог, прекрасно наследуются вдоль всей цепочки. Я уже забыл, как это было сделано, но такая возможность в msbuild точно есть.
Непрерывная интеграция проектов .NET: NAnt и/или MSBuild?