Como faço para que a versão do ClickOnce Publish corresponda à versão do arquivo AssemblyInfo.cs?

StackOverflow https://stackoverflow.com/questions/44470

Pergunta

Cada vez que publico o aplicativo em Clique uma vez Eu consigo atualizar o número da revisão em um.Existe uma maneira de fazer essa alteração automaticamente para alterar o número da versão no arquivo AssemblyInfo.cs (todos os nossos relatórios de erros analisam a versão do Assembly)?

Foi útil?

Solução

Usamos Team Foundation Server Team Build e adicionamos um bloco ao TFSBuild.proj AfterCompile target para acionar a publicação ClickOnce com nosso número de versão preferido:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />

O PublishApplicationVersion variável é gerada por uma tarefa personalizada do MSBuild para usar o número do conjunto de alterações do TFS, mas você pode usar sua própria tarefa personalizada ou um solução existente para obter o número da versão do arquivo AssemblyInfo.

Teoricamente, isso poderia ser feito em seu arquivo de projeto (que, de qualquer maneira, é apenas um script MSBuild), mas eu não recomendo a implantação a partir de uma máquina de desenvolvedor.

tenho certeza que outro integração contínua As soluções (CI) podem lidar com isso de forma semelhante.


Editar: Desculpe, entendi sua pergunta ao contrário.Ir do número da versão do ClickOnce para o arquivo AssemblyInfo deve ser possível.Tenho certeza de que as tarefas da comunidade MSBuild (link acima) têm uma tarefa para atualizar o arquivo AssemblyInfo, então você só precisa de uma tarefa personalizada para extrair o número da versão do XML de configuração do ClickOnce.

No entanto, você também pode considerar alterar seu relatório de erros para incluir também a versão de publicação do ClickOnce:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

Outras dicas

Implementei isso recentemente usando algumas tarefas personalizadas.Um problema que encontrei ao implementar isso com ClickOnce é que todos os seus arquivos DLL são atualizados.Isso faz com que a atualização ClickOnce baixe todos os arquivos do aplicativo a cada atualização.Isso ignora os recursos interessantes da implantação do ClickOnce, onde apenas os arquivos modificados são baixados novamente em uma atualização.

Apenas algo em que pensar ao implementar algo assim com ClickOnce.

Passos:

  1. Use o número de versão de incremento externo (se você aproveitar um servidor de integração contínua como CruiseControl.NET, então ele vem do rótulo de construção).
  2. Use GlobalVersionInfo.cs (arquivo referenciado por link por todos os projetos em sua solução) para manter a versão atual e atualizá-la na construção com a tarefa AssemblyInfo do Comunidade MSBuild tarefas.
  3. Roteiro Mago ferramenta de linha de comando do .NET SDK para atualizar o manifesto ClickOnce, usando a mesma versão (consulte o -v e -mv comuta).

Aliás, um bom bônus é que, sempre que você publicar automaticamente uma versão de implantação mais recente do ClickOnce por meio do script de integração, se você também especificar a versão mínima para mage.exe (igual à versão), cada usuário será atualizado automaticamente no próximo aplicativo lançar.

Provavelmente, você precisará criar um trecho de código que atualize AssemblyInfo.cs de acordo com o número da versão armazenado no arquivo .csproj.(A versão de implantação do ClickOnce é armazenada dentro de uma tag XML.)

Em seguida, você alteraria seu arquivo .csproj para executar esse trecho de código quando a compilação Publish|Release for executada.O pessoal do MSBuild blogou sobre como executar ações personalizadas durante determinados tipos de compilação;Verifica a Blog da equipe MSBuild.

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