Atualizando automaticamente o número da versão durante o build. (#csharp #dotnet #powershell #msbuild #dev)

Há algum tempo precisei aumentar automaticamente o número do build/revision toda vez que eu compilava a solution. Então eu fiz um script powershell que pode ser incluído como evento pre-build. Desta forma, consigo utilizar tanto em ambientes windows quanto em linux (com o powershell core).

A lógica é bem simples. No csproj que você quer alterar automaticamente:

  1. Inclua as informações de AssemblyVersion, FileVersion e/ou PackageVersion. Não precisa incluir todas, apenas as que fizerem sentido para o seu projeto.
  2. Inclua a target para PreBuild, apontando para o script .ps1 e informe a mudança de versão de acordo com o padrão abaixo.

Para cada pedaço da versão, você deve informar um = (sinal de igual) ou + (sinal de adição). Onde o valor estiver com =, o número nao será alterado, mas onde o valor estiver com +, o número será incrementado em 1.

Atualmente, o padrão que é compatível com este script é o <versao>.<release>.<hotfix>.<revisao/build>.

 

Exemplo de target:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">        
    <Exec Command="powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -File ..\BuildTasks\Set-VersionTask.ps1  -projectFile $(ProjectPath) -assemblyVersion =.=.=.+ -fileVersion =.=.=.+ -packageVersion =.=.=.+" />
</Target>

 

Na target acima:

  1. Estou executando o powershell, pedindo para ele “forçadamente” executar um script
  2. Como o build ocorre na pasta do projeto, estou voltando um diretório e acessando a pasta onde estão minhas tasks
  3. Através da variável $(ProjectPath), estou passando para o script o arquivo .csproj do projeto que está no processo de build.
  4. Por ultimo, para AssemblyVersion, FileVersion e PackageVersion, estou informando que apenas o valor da revisão deve ser aumentado automaticamente.

 

Você pode colocar uma condicional nesta target e fazer ela ser executada apenas quando o build for feito com configuração de Release. No exemplo acima, qualquer build (independentemente da configuração), vai ativar este script.

Uma “desvantagem” deste script é que ele gera uma alteração no arquivo .csproj. No caso do projeto que utilizei, isso não gerava maiores impactos.

 

Caso queiram utilizar, o script está no github: https://github.com/brenordv/msbuild-task-autoincrement-version

 

Espero ter ajudado.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in .Net, Conhecimento Técnico, Dev and tagged , , , , .