Gerar programaticamente um arquivo MSBuild .Targets personalizado
-
27-09-2019 - |
Pergunta
Tenho uma biblioteca de tarefas personalizadas do MSBuild que edito regularmente, refatorando código, adicionando novas tarefas e removendo tarefas antigas e extintas.Tornou-se difícil editar o arquivo .Targets para sincronizar com o que realmente está na biblioteca, então fiquei pensando: qual seria a melhor maneira de automatizar isso?
Gostaria de uma solução que fosse executada após a compilação bem-sucedida da biblioteca, para não receber erros desagradáveis ao tentar chamar minhas tarefas personalizadas de outros projetos.
Tenho algumas idéias sobre como fazer isso, mas gostaria de ver o que os outros inventam primeiro.:-)
Solução 2
Bem, eu encontrei uma maneira melhor de conseguir isso usando Tarefa da comunidade MSBuildde TaskSchema
tarefa:
<TaskSchema Assemblies="@(MyTaskAssembly)"
OutputPath="%(MyTaskAssembly.RootDir)%(MyTaskAssembly.Directory)"
CreateTaskList="true"
IgnoreMsBuildSchema="true"
Includes="Microsoft.Build.Commontypes.xsd"/>
Eu simplesmente garanto que importei o arquivo MSBuild.Community.Tasks.Targets, criei um ItemGroup
nomeado MyTaskAssembly
contendo todos os meus assemblies de tarefas (choque), em seguida, coloque a chamada de tarefa acima no AfterBuild
alvo do meu projeto.Doce!:)
Outras dicas
Você pode ter um arquivo .targets separado contendo apenas referências às suas tarefas.De um lado, vincule-o em seu arquivo .targets principal.Do outro, substitua-o executando alguma outra tarefa personalizada "mestre" em seu AfterBuild
alvo da solução das tarefas.Esta tarefa "mestre" fará com que todas as classes implementem ITask
do assembly recém-construído e grave-os no arquivo .targets.
Mas, para ser honesto, isso parece um exagero para mim.Você precisa editar seu arquivo .targets de qualquer maneira para poder usar suas novas tarefas.Escrever uma tarefa "mestre" e apoiá-la pode levar mais tempo.
Posso fantasiar com várias soluções mais automatizadas, mas considerações sobre "tempo investido"/"tempo economizado devido à automação" interrompem o voo da minha imaginação.=)