Программно генерировать пользовательский файл msbuild .targets
-
27-09-2019 - |
Вопрос
У меня есть библиотека пользовательских задач MSBuild, которые я редактирую довольно регулярно, рефакторинг код, добавляя новые задачи и удаление старых, несуществующих. Становится болью, чтобы редактировать файл .targets, чтобы синхронизировать с тем, что на самом деле в библиотеке, поэтому мне было интересно, какой бы лучший способ автоматизировать это?
Я хотел бы, чтобы решение, которое проходит после успешной вкладной библиотеки, так что я не получаю никаких неприятных ошибок при попытке вызвать мои пользовательские задачи из других проектов.
У меня есть несколько идей о том, как это сделать, но я хотел бы увидеть, что другие придумывают первым. :-)
Решение 2
Ну, я нашел более приятный способ достичь этого с помощью Msbuild Community TaskС. TaskSchema
задача:
<TaskSchema Assemblies="@(MyTaskAssembly)"
OutputPath="%(MyTaskAssembly.RootDir)%(MyTaskAssembly.Directory)"
CreateTaskList="true"
IgnoreMsBuildSchema="true"
Includes="Microsoft.Build.Commontypes.xsd"/>
Я просто убедитесь, что я импортировал файл msbuild.community.tasks.targets, создать ItemGroup
название MyTaskAssembly
Содержание всех моих сборок задач (Shocker), затем придерживайтесь вышеуказанного вызова задания в AfterBuild
цель моего проекта. Милая! :)
Другие советы
У вас может быть отдельный файл .Targets, содержащий только ссылки на ваши задачи. С одной стороны связать его в основном файле .targets. От другого перезаписи он выполняет некоторую очередную «главную» пользовательскую задачу в вашем AfterBuild
цель решения задач. Эта «главная» задача получит все классы, реализующие ITask
От недавно созданной сборки и напишите их в файл .targets.
Но быть честным, это выглядит как изложенный для меня. Вы должны отредактировать свой файл .targets в любом случае, чтобы получить использование ваших новых задач. Написание такого «главного» задачи и поддержки его может занять вам больше времени.
Я могу фантазировать несколько более автоматизированных решений, но соображения «вложенного времени» / «время, сохраненное из-за автоматизации», остановить полет моего воображения. знак равно