Automatisch bijgewerkt versienummer

stemmen
95

Ik wil graag de versie bezit van mijn aanvraag moeten worden verhoogd voor elke te bouwen, maar ik ben niet zeker over hoe je deze functionaliteit in Visual Studio (2005/2008) in te schakelen. Ik heb geprobeerd om de AssemblyVersion als 1.0. * Opgeven, maar het maakt me niet precies wat ik wil.

Ik ben ook met behulp van een bestand met instellingen en in eerdere pogingen wanneer de vergadering versie veranderde mijn instellingen werd teruggezet naar de standaard aangezien de toepassing gezocht naar het bestand instellingen in een andere directory.

Ik zou graag in staat zijn om een ​​versie nummer weer te geven in de vorm van 1.1.38, zodat wanneer een gebruiker een probleem dat ik kan de versie die ze gebruiken aanmelden vindt evenals vertel hen om te upgraden als ze een oude release.

Een korte uitleg over hoe de versioning werken zou ook gewaardeerd worden. Wanneer begint de bouw en revisie nummer krijgen verhoogd?

De vraag is gesteld op 03/08/2008 om 12:12
bron van user
In andere talen...                            


7 antwoorden

stemmen
85

Met de "gebouwd in" dingen, kan je niet, als het gebruik van 1.0. * Of 1.0.0. * Zal de herziening vervangen en nummers op te bouwen met een gecodeerde datum / tijdstempel, die meestal ook een goede manier.

Voor meer info, zie de Assembly Linker Documentatie in de map / v tag.

Zoals voor automatisch opeenvolgende nummers, gebruikt u de AssemblyInfo Taak:

AssemblyInfo Task

Dit kan worden geconfigureerd om automatisch verhogen het buildnummer.

Er zijn 2 Gotchas:

  1. Elk van de 4 getallen in de versie string is beperkt tot 65535. Dit is een Windows Beperking en waarschijnlijk opgelost.
  2. Het gebruik van met met Subversion vereist een kleine wijziging:

Het ophalen van het versienummer is dan heel makkelijk:

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

En, om duidelijk te maken: In .net of op zijn minst in C #, de opbouw is in feite het derde getal, niet de vierde, zoals sommige mensen (bijvoorbeeld Delphi ontwikkelaars die gewend zijn aan Major.Minor.Release.Build) zou verwachten.

In .net, het is Major.Minor.Build.Revision.

antwoordde op 03/08/2008 om 12:41
bron van user

stemmen
19

VS.NET defaults de Vergadering versie 1.0 * en maakt gebruik van de volgende logica als het automatisch verhogen van:. Het zet de build deel aan het aantal dagen sinds 1 januari 2000, en stelt de herziening deel om het aantal seconden sinds middernacht, lokale tijd, gedeeld door twee. Zie dit artikel MSDN .

Assembly-versie is gevestigd in een AssemblyInfo.vb of AssemblyInfo.cs bestand. Vanaf het bestand:

' 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")> 
antwoordde op 30/09/2008 om 21:58
bron van user

stemmen
8

Ik heb gemerkt dat het goed werkt om de datum van de laatste build gewoon weer te geven met behulp van de volgende, waar een versie van het product nodig is:

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

In plaats van een poging om de versie te krijgen van iets als het volgende:

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;
}
antwoordde op 04/03/2013 om 21:58
bron van user

stemmen
6

Wat source besturingssysteem gebruikt u?

Bijna alle van hen hebben een of andere vorm van $ Id $ tag die wordt uitgebreid wanneer het bestand is ingecheckt.

Ik gebruik meestal een bepaalde vorm van hacks om dit weer te geven als het versienummer.

Het andere alternatief is te gebruiken om de datum te gebruiken als het buildnummer: 080803-1448

antwoordde op 03/08/2008 om 19:46
bron van user

stemmen
2

[Visual Studio 2017 .csproj eigenschappen]

Om uw PackageVersion / Versie / AssemblyVersion onroerend goed (of een andere eigenschap) automatisch updaten door eerst, maak een nieuwe Microsoft.Build.Utilities.Taskklasse die uw huidige buildnummer krijgen en terug te sturen de bijgewerkte nummer (raad ik aan om een apart project enkel voor die klasse).

Ik handmatig de MAJOR.MINOR nummers te werken, maar laten we MSBuild automatisch wordt bijgewerkt het buildnummer (1.1. 1 , 1.1. 2 , 1.1. 3 , enz. :)

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

}

Bel dan uw onlangs opgerichte Task op MSBuild proces van het toevoegen van de volgende code op uw Csproj file:

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

Bij het kiezen van Visual Studio Pack project optie (alleen veranderen BeforeTargets="Build"voor het uitvoeren van de taak die voor Build) de RefreshVersion code zal worden geactiveerd om de nieuwe versie getal te berekenen, en XmlPoketaak zal uw Csproj eigendom dienovereenkomstig bijwerken (ja, het zal het bestand aan te passen).

Bij het werken met Nuget bibliotheken, heb ik ook het pakket te sturen naar Nuget repository door gewoon het toevoegen van de volgende build taak om het vorige voorbeeld.

<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\nugetis waar ik heb de Nuget client (vergeet niet om je Nuget API-sleutel te besparen door te bellen nuget SetApiKey <my-api-key>of om de toets op het Nuget push call bevatten).

Voor het geval dat het helpt iemand ^ _ ^.

antwoordde op 10/05/2017 om 14:08
bron van user

stemmen
1

Enige tijd geleden schreef ik een quick and dirty exe dat zou update de versie # 's in een AssemblyInfo {cs / ww} -. Ik heb ook gebruikt rxfind.exe (een eenvoudige en krachtige-regex based search vervangen tool) aan de te doen bijwerken vanaf een command line, als onderdeel van het bouwproces. Een paar andere tips helpfule:

  1. scheiden de AssemblyInfo in productonderdelen (bedrijfsnaam, versie, etc.) en montage specifieke onderdelen (assemblage naam etc.). Zie hier
  2. Ook - ik gebruik subversie, dus ik vond het nuttig om het buildnummer om subversie revisie nummer daardoor ingesteld waardoor het heel makkelijk om altijd terug naar de codebase dat de montage gegenereerd (bijv 1.4.100.1502 werd gebouwd van herziening 1502).
antwoordde op 04/08/2008 om 20:51
bron van user

stemmen
0

Als u wilt dat een auto incrementing nummer dat elke keer dat een compilatie is gedaan updates, kunt u gebruik maken VersionUpdater uit een pre-build evenement. Uw pre-build evenement kan de build configuratie te controleren als je liever, zodat het versienummer alleen zal verhogen voor een release build (bijvoorbeeld).

antwoordde op 28/02/2010 om 22:16
bron van user

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