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.:-)

Foi útil?

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.=)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top