atualizar automaticamente o número da versão

votos
95

Eu gostaria que a propriedade versão do meu aplicativo para ser incrementado para cada compilação, mas não tenho certeza sobre como habilitar essa funcionalidade no Visual Studio (2005/2008). Tentei especificar o AssemblyVersion como 1.0. *, Mas ele não me exatamente o que eu quero.

Eu também estou usando um arquivo de configurações e em tentativas anteriores, quando a versão do assembly mudou minhas configurações foi redefinir para o padrão desde que o aplicativo olhou para o arquivo de configurações em outro diretório.

Eu gostaria de ser capaz de exibir um número de versão na forma de 1.1.38 Assim, quando um usuário encontra um problema que pode registrar a versão que eles estão usando, bem como dizer-lhes para atualizar se eles têm uma versão antiga.

Uma breve explicação de como funciona o controle de versão também seria apreciada. Quando é que o número de compilação e revisão se incrementado?

Publicado 03/08/2008 em 12:12
fonte usuário
Em outras línguas...                            


7 respostas

votos
85

Com o "construído em" coisas, você não pode, como a utilização de 1,0. * Ou 1.0.0. * Irá substituir a revisão e números de compilação com uma data codificado / timestamp, que normalmente é também uma boa maneira.

Para mais informações, consulte o Assembly Linker Documentação na / v tag.

Como para incrementar automaticamente números, use a tarefa AssemblyInfo:

AssemblyInfo Task

Este pode ser configurado para incrementar automaticamente o número de compilação.

Existem 2 Gotchas:

  1. Cada um dos 4 números na seqüência de versão é limitada a 65535. Esta é uma limitação do Windows e improvável para ficar fixo.
  2. Usando com com o Subversion requer uma pequena mudança:

Recuperar o número da versão for então muito fácil:

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

E, para esclarecer: No .net ou pelo menos em C #, a compilação é realmente o número TERCEIRO, não o quarto como algumas pessoas (por exemplo Delphi Developers que estão acostumados a Major.Minor.Release.Build) poderia esperar.

No .net, é Major.Minor.Build.Revision.

Respondeu 03/08/2008 em 12:41
fonte usuário

votos
19

VS.NET defaults a versão do assembly a 1,0 * e usa a seguinte lógica quando auto-incremento:. Ele define a parte de construção com o número de dias desde 1 de Janeiro de 2000, e define a parte de revisão para o número de segundos desde a meia-noite, hora local, dividido por dois. Consulte este artigo do MSDN .

versão do assembly está localizado em um arquivo AssemblyInfo.vb ou AssemblyInfo.cs. A partir do arquivo:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
Respondeu 30/09/2008 em 21:58
fonte usuário

votos
8

Eu descobri que ele funciona bem para simplesmente exibir a data da última compilação usando o seguinte sempre que seja necessária uma versão do produto:

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

Ao invés de tentar obter a versão de algo como o seguinte:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}
Respondeu 04/03/2013 em 21:58
fonte usuário

votos
6

O sistema de controle de origem você está usando?

Quase todos eles têm alguma forma de $ Id $ tag que será expandida quando o arquivo é verificado.

Eu costumo usar alguma forma de hackery para exibir este como o número da versão.

A outra alternativa é usar a usar a data como o número de compilação: 080803-1448

Respondeu 03/08/2008 em 19:46
fonte usuário

votos
2

[Visual Studio 2017, csproj propriedades]

Para atualizar automaticamente sua propriedade PackageVersion / versão / AssemblyVersion (ou qualquer outra propriedade), em primeiro lugar, criar uma nova Microsoft.Build.Utilities.Taskclasse que vai ter o seu número de compilação atual e enviar de volta o número atualizado (eu recomendo para criar um projeto separado apenas para essa classe).

I actualizar manualmente os números Major.Minor, mas deixe MSBuild para actualizar automaticamente o número de compilação (1.1. 1 , 1.1. 2 , 1.1. 3 , etc :)

using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;

public class RefreshVersion : Microsoft.Build.Utilities.Task
{
    [Output]
    public string NewVersionString { get; set; }
    public string CurrentVersionString { get; set; } 

    public override bool Execute()
    {       
        Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");

        DateTime d = DateTime.Now;
        NewVersionString = new Version(currentVersion.Major, 
            currentVersion.Minor, currentVersion.Build+1).ToString();
        return true;
    }

}

Em seguida, ligue para o seu recém-criado Tarefa sobre o processo MSBuild acrescentando o próximo código em seu arquivo csproj:

<Project Sdk="Microsoft.NET.Sdk">    
...
<UsingTask TaskName="RefreshVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\<dll path>\BuildTasks.dll" />
<Target Name="RefreshVersionBuildTask" BeforeTargets="Pack" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
   <RefreshVersion CurrentVersionString="$(PackageVersion)">
          <Output TaskParameter="NewVersionString" PropertyName="NewVersionString" />             
   </RefreshVersion>
   <Message Text="Updating package version number to $(NewVersionString)..." Importance="high" />
   <XmlPoke XmlInputPath="$(MSBuildProjectDirectory)\mustache.website.sdk.dotNET.csproj" Query="/Project/PropertyGroup/PackageVersion" Value="$(NewVersionString)" />
</Target>
...
<PropertyGroup>
 ..
 <PackageVersion>1.1.4</PackageVersion>
 ..

Ao escolher opção de projeto Visual Studio Pack (apenas mudar a BeforeTargets="Build"para executar a tarefa antes de compilação) o código RefreshVersion será acionado para calcular o número da nova versão, e XmlPoketarefa irá atualizar sua propriedade .csproj conformidade (sim, ele vai modificar o arquivo).

Ao trabalhar com bibliotecas NuGet, eu também enviar o pacote para o repositório NuGet apenas adicionando a próxima tarefa de compilação ao exemplo anterior.

<Message Text="Uploading package to NuGet..." Importance="high" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\bin\release" Command="c:\nuget\nuget push *.nupkg -Source https://www.nuget.org/api/v2/package" IgnoreExitCode="true" />

c:\nuget\nugeté onde eu tenho o cliente NuGet (lembre-se de salvar a sua chave de API NuGet chamando nuget SetApiKey <my-api-key>ou para incluir a chave na chamada impulso NuGet).

Apenas no caso que ajude alguém ^ _ ^.

Respondeu 10/05/2017 em 14:08
fonte usuário

votos
1

Algum tempo atrás eu escrevi um exe rápida e suja que atualizar a versão # 's em um AssemblyInfo {cs / vb} -. I rxfind.exe também têm usado (a busca simples e poderosa baseado em regex ferramenta substituir) para fazer o actualizar a partir de uma linha de comando como parte do processo de construção. Um par de outras dicas helpfule:

  1. separar o AssemblyInfo em partes do produto (o nome da empresa, versão, etc.) e as peças de montagem específicos (nome montagem etc.). veja aqui
  2. Também - eu uso subversão, então eu achei útil para definir o número de compilação para o número de revisão de subversão, assim, tornando-se realmente fácil de sempre voltar para a base de código que gerou a montagem (por exemplo 1.4.100.1502 foi construído a partir da revisão 1502).
Respondeu 04/08/2008 em 20:51
fonte usuário

votos
0

Se você quiser um número de incremento automático que atualiza cada vez que uma compilação é feita, você pode usar VersionUpdater de um evento de pré-compilação. Seu evento pré-compilação pode verificar a configuração de compilação, se você preferir para que o número versão só será incrementado para uma compilação de lançamento (por exemplo).

Respondeu 28/02/2010 em 22:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more