Вы должны реализовать exe как задачу MSbuild.
По сути, вы создаете класс C #, который наследуется от класса Microsoft.Build.Utilities.Task , и переопределяете Execute.() метод.
Что-то вроде
public class CleanXAML : Task
{
}
Затем вы уточняете (либо в своем файле сборки, либо во внешнем импортируемом файле .tasks, имени задачи и пути к только что созданной DLL)
<UsingTask AssemblyFile="C:\customtasks\XamlTasks.dll"
TaskName="Rob.CustomTasks.Xaml.CleanXaml"/>
Это позволяет вам вызывать это как любую другую задачу MsBuild
<CleanXaml Source="$(PathtoOriginalXaml)"
Destination="$(SourceCodePath)\$(cleanXaml.xaml)" />
Оттуда вам нужно найти лучший способ «внедрить» это в ваш процесс сборки.В зависимости от того, как вы строите (рабочий процесс msbuild, vs2010, teambuild или teambuild), существуют разные способы сделать это.По сути, вам нужно, чтобы это произошло ПРЕЖДЕ, чем вызывается цель CoreCompile, и убедитесь, что ваш «выходной xaml» правильно заменяет то, что ожидает CSC.exe.
Выполните поиск в задачах MsBuild для получения дополнительной информации или попросите любоговопрос у вас здесь.
Я бы настоятельно рекомендовал этот подход по сравнению с использованием задачи CallEXE в MSBuild, поскольку в этом случае свойства и элементы MSBuild остаются в контексте, поэтому вы просто переходите от этапа сборки к этапу сборки, а не отводите весь путь целикомвещь, чтобы сделать преобразование, а затем надеется, что он продолжает работать.