2010-11-22 2 views
2

У меня есть библиотека пользовательских задач MSBuild, которые я редактирую довольно регулярно, рефакторинг кода, добавление новых задач и удаление старых, недействующих. Стало больно редактировать файл .Targets для синхронизации с тем, что на самом деле находится в библиотеке, поэтому мне было интересно, что было бы лучшим способом автоматизировать это?Программно создайте пользовательский файл MSBuild .Targets

Я бы хотел, чтобы решение было выполнено после того, как библиотека построена успешно, так что я не получаю никаких неприятных ошибок при попытке вызвать мои пользовательские задачи из других проектов.

У меня есть несколько идей о том, как это сделать, но я хотел бы посмотреть, что другие придумают сперва. :-)

ответ

0

Ну, я нашел более хороший способ для достижения этой цели с помощью MSBuild Community Task «s TaskSchema задачи:

<TaskSchema Assemblies="@(MyTaskAssembly)" 
      OutputPath="%(MyTaskAssembly.RootDir)%(MyTaskAssembly.Directory)" 
      CreateTaskList="true" 
      IgnoreMsBuildSchema="true" 
      Includes="Microsoft.Build.Commontypes.xsd"/> 

Я просто убедиться, что я импортировал файл MSBuild.Community.Tasks.Targets , создайте ItemGroup с именем MyTaskAssembly, содержащий все мои сборки задач (шокер), затем придерживайтесь вышеуказанного вызова задачи в объекте AfterBuild моего проекта. Милая! :)

1

Возможно, у вас есть отдельный файл .targets, содержащий только ссылки на ваши задачи. С одной стороны это ссылка в ваш основной файл .targets. От другой перезаписывать его выполнение какой-то другой «основной» пользовательской задачи в вашей целевой задаче AfterBuild. Эта «основная» задача получит все классы, реализующие ITask из недавно собранной сборки и записывая их в файл .targets.
Но, честно говоря, это выглядит для меня излишним. Вы все равно должны изменить свой файл .targets, чтобы использовать ваши новые задачи. Написание такой «магистерской» задачи и ее поддержка могут занять больше времени.

Я могу фантазировать о нескольких более автоматизированных решениях, но соображения «времени, потраченного»/«время, сэкономленное благодаря автоматизации», прекращают полет моего воображения. =)

+0

Я нашел решение, использующее PowerShell, сборку и XML. Я запускаю сценарий PowerShell в целевом объекте AfterBuild проекта, и файл .Targets создается, как ожидалось. Это не кажется мне элегантным решением, хотя ... Любые мысли об этом или альтернативы? =) – 2010-11-23 16:43:20

Смежные вопросы