Personalizar todos os builds do .NET

As técnicas neste artigo são úteis quando você deseja personalizar todos os builds executados em um computador, máquina virtual ou contêiner específico. Por exemplo, ao configurar um servidor de build, talvez seja necessário definir globalmente as configurações do MSBuild para todos os builds no servidor. Em princípio, você pode modificar os arquivos globais Microsoft.Common.Targets ou Microsoft.Common.Props, mas há uma maneira melhor. Você pode afetar todos os builds de um determinado tipo de projeto (como todos os projetos C#) usando determinadas propriedades do MSBuild e adicionando determinados arquivos personalizados .targets e .props.

Antes e depois dos arquivos .props e .targets padrão

Para afetar todos os builds do C# ou do Visual Basic regidos por uma instalação do MSBuild ou do Visual Studio, crie um arquivo Custom.Before.Microsoft.Common.Targets ou Custom.After.Microsoft.Common.Targets com destinos que serão executados antes ou depois de Microsoft.Common.targets ou um arquivo Custom.Before.Microsoft.Common.Props ou Custom.After.Microsoft.Common.Props com propriedades que serão processadas antes ou depois de Microsoft.Common.props.

Você pode especificar os locais desses arquivos usando as seguintes propriedades do MSBuild:

  • CustomBeforeMicrosoftCommonProps
  • CustomBeforeMicrosoftCommonTargets
  • CustomAfterMicrosoftCommonProps
  • CustomAfterMicrosoftCommonTargets
  • CustomBeforeMicrosoftCSharpTargets
  • CustomBeforeMicrosoftVisualBasicTargets
  • CustomAfterMicrosoftCSharpTargets
  • CustomAfterMicrosoftVisualBasicTargets

As versões Comuns dessas propriedades afetam os projetos C# e Visual Basic. Você pode definir essas propriedades na linha de comando do MSBuild.

msbuild /p:CustomBeforeMicrosoftCommonTargets="C:\build\config\Custom.Before.Microsoft.Common.Targets" MyProject.csproj

Aviso

O Visual Studio usará os arquivos personalizados .targets ou .props se os encontrar na pasta MSBuild sempre que compilar qualquer projeto do tipo correspondente. Isso pode ter consequências não intencionais e, se feito incorretamente, pode desabilitar a capacidade do Visual Studio de compilar em seu computador.

Substituir o arquivo props comum

Você também pode usar as propriedades AlternateCommonProps para especificar seu arquivo .props a ser usado em vez de Microsoft.Common.props. Se você já sentiu a necessidade de personalizar Microsoft.Common.props modificando-o diretamente, poderia copiar a versão padrão desse arquivo em outro arquivo e, em seguida, fazer as alterações apenas na versão alternativa.

A melhor abordagem depende do seu cenário. Usando a Extensibilidade do Visual Studio, você pode personalizar o sistema de build e fornecer um mecanismo para instalar e gerenciar as personalizações.

Se você tiver um servidor de build dedicado e quiser garantir que determinados destinos sempre sejam executados em todos os builds do tipo de projeto apropriado que são executados nesse servidor, o uso de um arquivo personalizado global .targets ou .props fará sentido. Se você quiser que os destinos personalizados sejam executados somente quando determinadas condições se aplicarem, use outro local de arquivo e defina o caminho para esse arquivo definindo a propriedade MSBuild apropriada na linha de comando do MSBuild somente quando necessário.