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

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

Overview

Alguma vez você já se perguntou como poderia facilitar a vida incrementando automaticamente o número de build ou revisão do seu projeto a cada compilação? Neste post, compartilho um script PowerShell capaz de fazer justamente isso, tanto para ambientes Windows quanto Linux. Com uma abordagem simples e prática, detalho como incluir esse script como um evento pre-build no seu arquivo csproj, simplificando o processo de versionamento do software. Acompanhe o tutorial e torne a gestão de versões uma tarefa mais ágil e menos suscetível a erros humanos.

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:

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