Как я могу вставить XAML-преобразование в мою сборку? - PullRequest
3 голосов
/ 07 февраля 2011

Я хотел бы запустить пользовательский EXE-файл для моих XAML Resource Словари. Допустим, этот exe, который у меня есть, собирается удалить комментарии, пробелы и неиспользуемые ресурсы. Исходные файлы XAML должны быть нетронутыми, но XAML (silverlight) и BAML (wpf), которые заканчиваются в XAP и DLL, должны быть преобразованы. Он должен работать на моем компьютере и сервере сборки.

Мой вопрос: какой самый простой и надежный способ запустить этот exe?

Моей первой мыслью было проведение мероприятия перед сборкой. Но это должно сработать с исходным файлом XAML. Развитие станет довольно болезненным.

К моменту запуска события после сборки мои ресурсы уже скомпилированы в dll.

Какие у меня варианты?

1 Ответ

2 голосов
/ 07 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...