Программно создать пользовательский файл MSBuild .Targets - PullRequest
2 голосов
/ 22 ноября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

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

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

0 голосов
/ 28 мая 2012

Что ж, я нашел лучший способ добиться этого, используя MSBuild Community Task s TaskSchema task:

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

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

...