Personalizar o build local

Quando você trabalha em uma equipe que usou um repositório de código como o GitHub, um controle do código-fonte ou qualquer base de código compartilhada, mas deseja personalizar seus builds em seu computador local, talvez temporariamente para reproduzir um bug ou testar uma configuração diferente, pode ser conveniente manter essas personalizações separadas dos arquivos de projeto compartilhados com o repositório de código compartilhado. Este artigo descreve algumas extensões de build disponíveis no MSBuild que permitem que você faça configurações personalizadas específicas a um usuário ou somente locais.

Arquivo .user

Usar $(MSBuildProjectFullPath).user, também chamado de arquivo .user nesse contexto, também é uma opção. Esse arquivo destina-se a manter extensões, opções ou variáveis específicas para seu computador local. Ele não se destina a ser carregado no controle do código-fonte e é automaticamente verificado em .gitignore. Para alterações mais abrangentes, prefira alterar o projeto em si, para que os futuros mantenedores não precisem saber sobre esse mecanismo de extensão.

Em projetos multiplataforma com suporte, o arquivo .user é importado automaticamente em builds internos e externos, para que você possa apenas criar o arquivo dentro da solução. Se você estiver trabalhando em outro tipo de build, ainda poderá usar o arquivo .user. Você pode criá-lo em sua solução e importá-lo para o arquivo de projeto.

<Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')"/>

MSBuildExtensionsPath e MSBuildUserExtensionsPath

Por convenção, muitos arquivos de lógica de build principais são importados

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportBefore\*.targets

antes dos respectivos conteúdos, e

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportAfter\*.targets

depois. Essa convenção permite que SDKs instalados ampliem a lógica da compilação de tipos de projeto comuns.

A mesma estrutura de diretório é pesquisada em $(MSBuildUserExtensionsPath), que é a pasta por usuário %LOCALAPPDATA%\Microsoft\MSBuild. Arquivos colocados nessa pasta serão importados para todos os builds do tipo de projeto correspondente executados sob as credenciais do usuário. Desabilite as extensões de usuário definindo as propriedades nomeadas como o arquivo de importação no padrão ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}. Por exemplo, definir ImportUserLocationsByWildcardBeforeMicrosoftCommonProps para false impediria a importação de $(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\*.

Configuração personalizada com base na linguagem do projeto

Se você precisar de comportamentos diferentes dependendo da linguagem .NET (C#, Visual Basic ou F#), poderá adicionar grupos de propriedades com condições que dependem da extensão de arquivo do projeto em $(MSBuildProjectExtension) para definir propriedades específicas da linguagem e seus valores.

<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
   <!-- Put VB-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.fsproj'">
   <!-- Put F#-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'">
   <!-- Put C#-only property definitions here -->
</PropertyGroup>