Automatisk oppdatere versjonsnummer

stemmer
97

Jeg ønsker den versjonen tilhører min søknad som skal økes for hvert bygge, men jeg er ikke sikker på hvordan du aktiverer denne funksjonaliteten i Visual Studio (2005/2008). Jeg har forsøkt å spesifisere AssemblyVersion som 1.0. *, Men det blir ikke meg akkurat det jeg vil.

Jeg bruker også en innstillingsfil og i tidligere forsøk når forsamlingen versjonen endret innstillingene mine fikk tilbakestille til standard siden programmet så for innstillingsfilen i en annen katalog.

Jeg ønsker å være i stand til å vise et versjonsnummer i form av 1.1.38 slik at når en bruker finner et problem jeg kan logge den versjonen de bruker samt fortelle dem til å oppgradere hvis de har en gammel versjon.

En kort forklaring av hvordan versjons fungerer også ville være verdsatt. Når går bygge og revisjonsnummer bli økes?

Publisert på 03/08/2008 klokken 11:12
kilden bruker
På andre språk...                            


7 svar

stemmer
87

Med "innebygd" ting, kan du ikke, som ved hjelp av 1.0. * Eller 1.0.0. * Vil erstatte revisjon og bygge tall med en kodet dato / tidsstempel, som vanligvis er også en god måte.

For mer info, se Assembly Linker Dokumentasjon i / v tag.

Som for automatisk økes tall, bruker AssemblyInfo Oppgave:

AssemblyInfo Task

Dette kan konfigureres til automatisk å øke den build-nummeret.

Det er 2 Gotchas:

  1. Hver av de 4 tallene i versjon strengen er begrenset til 65535. Dette er en Windows Begrensning og neppe å bli løst.
  2. Bruke med med Subversion krever en liten endring:

Hente versjonsnummeret er da ganske enkelt:

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);

Og, for å klargjøre: I .net eller i det minste i C #, er byggingen faktisk det tredje tallet, ikke den fjerde som noen mennesker (for eksempel Delphi utviklere som er vant til Major.Minor.Release.Build) kunne forvente.

I .net, er det Major.Minor.Build.Revision.

Svarte 03/08/2008 kl. 11:41
kilden bruker

stemmer
19

VS.Net mislighold Forsamlingen versjonen til 1,0 * og bruker følgende logikk når automatisk økes. Det setter bygge del til antall dager siden den første januar 2000, og setter revisjonen del til antall sekunder siden midnatt, lokal tid, delt på to. Se denne MSDN-artikkel .

Montering versjon ligger i et assemblyinfo.vb eller assemblyinfo.cs fil. Fra filen:

' 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")> 
Svarte 30/09/2008 kl. 20:58
kilden bruker

stemmer
8

Jeg har funnet ut at det fungerer godt å bare vise datoen for den siste bygge ved hjelp av følgende hvor et produkt versjonen er nødvendig:

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

Snarere enn å forsøke å få den versjonen fra noe sånt som følgende:

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;
}
Svarte 04/03/2013 kl. 20:58
kilden bruker

stemmer
6

Hva kildekontroll system bruker du?

Nesten alle av dem har noen form for $ Id $ tag som blir utvidet når filen er sjekket inn.

Jeg pleier å bruke noen form for hackery å vise dette som versjonsnummeret.

Det andre alternativet er å bruke å bruke datoen som byggnummer: 080803-1448

Svarte 03/08/2008 kl. 18:46
kilden bruker

stemmer
2

[Visual Studio 2017, .csproj egenskaper]

For å automatisk oppdatere PackageVersion / versjon / AssemblyVersion eiendom (eller annen bolig), første, opprette en ny Microsoft.Build.Utilities.Taskklasse som vil få din nåværende byggnummer og sende tilbake den oppdaterte tall (jeg anbefaler å opprette et eget prosjekt for den klassen).

Jeg oppdatere manuelt MAJOR.MINOR tall, men la MSBuild å automatisk oppdatere build-nummeret (1.1. 1 , 1.1. 2 , 1.1. 3 osv :)

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;
    }

}

Deretter ringer du nylig opprettet oppgave på MSBuild prosess å legge neste koden på .csproj filen:

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

Når plukke Visual Studio Pack prosjektalternativ (bare endre til BeforeTargets="Build"for å gjennomføre oppgaven før Build) den RefreshVersion koden vil bli utløst for å beregne det nye versjonsnummeret, og XmlPokeoppgaven vil oppdatere .csproj eiendom tilsvarende (ja, vil det endre filen).

Når du arbeider med nuget biblioteker, jeg også sende pakken til nuget depot ved å bare legge neste build oppgave til forrige eksempel.

<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\nugeter der jeg har nuget klient (husk å lagre nuget API-nøkkel ved å ringe nuget SetApiKey <my-api-key>eller å ta nøkkelen på nuget push-anrop).

Bare i tilfelle det hjelper noen ^ _ ^.

Svarte 10/05/2017 kl. 14:08
kilden bruker

stemmer
1

For en tid siden skrev jeg en rask og skitne exe som vil oppdatere versjonen # 's på en assemblyinfo {cs / vb} -. Jeg har også brukt rxfind.exe (en enkel og kraftig regex-baserte søk erstatt verktøy) til å gjøre det oppdatere fra en kommandolinjen som en del av byggeprosessen. Et par andre helpfule hint:

  1. skille assemblyinfo inn i produktdeler (firmanavn, versjon, etc.) og montering spesifikke deler (sammenstilling navn etc.). se her
  2. Også - jeg bruker Subversion, så jeg fant det nyttig å sette byggnummeret til undergraving revisjonsnummer og dermed gjør det veldig enkelt å alltid komme tilbake til kodebase som genererte enheten (f.eks 1.4.100.1502 ble bygget fra revisjon 1502).
Svarte 04/08/2008 kl. 19:51
kilden bruker

stemmer
0

Hvis du ønsker en automatisk inkrementering nummer som oppdateres hver gang en samling er gjort, kan du bruke VersionUpdater fra en pre-build hendelsen. Pre-build hendelse kan sjekke bygge konfigurasjon hvis du foretrekker, slik at versjonsnummeret øker bare for en utgivelse bygge (for eksempel).

Svarte 28/02/2010 kl. 21:16
kilden bruker

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