Automatische Aktualisierung Versionsnummer

stimmen
95

Ich würde die Version Eigenschaft meiner Anwendung wie für jeden Build erhöht werden, aber ich bin nicht sicher, wie diese Funktionalität in Visual Studio aktivieren (2005/2008). Ich habe versucht, die Assembly als 1,0 angeben. * Aber es hat mich nicht genau das, was ich will.

Ich verwende auch eine Einstellungsdatei und in früheren Versuchen, wenn die Baugruppe Version geändert meine Einstellungen auf den Standard zurückgesetzt wurden, da die Anwendung für die Einstellungsdatei in einem anderen Verzeichnis gesucht.

Ich möchte in der Lage sein, in Form von 1.1.38 so eine Versionsnummer angezeigt wird, wenn ein Benutzer ein Problem finde ich die Version anmelden können sie auch sagen, sie verwenden, um zu aktualisieren, wenn sie eine alte Version installiert haben.

Eine kurze Erklärung, wie die Versionierung Arbeiten würde auch geschätzt werden. Wann kommt die Build- und Revisionsnummer erhöht?

Veröffentlicht am 03/08/2008 um 12:12
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
85

Mit dem „Built in“ Sachen, können Sie nicht, als 1.0 verwenden. * Oder 1.0.0. * Werden die Revision und Build-Nummern mit einem codierten Datum / Zeitstempel, die in der Regel auch ein guter Weg ist, ersetzen.

Für weitere Informationen siehe die Assembly Linker Dokumentation im / v - Tag.

Wie für die Zahlen automatisch erhöht wird, verwenden Sie die Assembly Aufgabe:

Assembly Aufgabe

Dies kann so konfiguriert werden, um automatisch die Versionsnummer inkrementiert wird.

Es gibt 2 Gotchas:

  1. Jede der vier Zahlen in der Version String ist begrenzt auf 65535. Dies ist eine Windows-Begrenzung und unwahrscheinlich zu reparieren lassen.
  2. Die Verwendung mit mit Subversion eine kleine Änderung erfordert:

Abrufen der Versionsnummer ist dann ganz einfach:

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

Und zu klären: In .net oder zumindest in C #, die Build ist eigentlich die dritte Zahl, nicht die vierte, wie einige Leute (zB Delphi Entwickler, die zu Major.Minor.Release.Build verwendet werden) erwarten könnte.

In .net, es ist major.minor.build.revision.

Beantwortet am 03/08/2008 um 12:41
quelle vom benutzer

stimmen
19

VS.NET defaults die Assembly - Version 1.0 * und verwendet die folgende Logik , wenn automatische Erhöhung. Setzt sich den Build - Teil auf die Anzahl der Tage seit dem 1. Januar 2000 und setzt den Revisions Teil auf die Anzahl der Sekunden seit Mitternacht, Ortszeit, geteilt durch zwei. Finden Sie in diesem MSDN - Artikel .

Assembly-Version in einer AssemblyInfo.vb oder AssemblyInfo.cs-Datei. Aus der Datei:

' 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")> 
Beantwortet am 30/09/2008 um 21:58
quelle vom benutzer

stimmen
8

Ich habe festgestellt, dass es gut funktioniert einfach auf das Datum der letzten Build Anzeige mit dem folgenden überall dort, wo eine Produktversion benötigt wird:

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

Anstatt zu versuchen, die Version von in etwa wie folgt zu erhalten:

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;
}
Beantwortet am 04/03/2013 um 21:58
quelle vom benutzer

stimmen
6

Welche Quellkontrollsystem verwenden Sie?

alle von ihnen fast irgendeine Form von $ Id $ tag haben, die erweitert wird, wenn die Datei eingecheckt wird.

Normalerweise verwende ich eine Form von hackery dies als die Versionsnummer angezeigt werden soll.

Die andere Alternative ist, verwenden Sie das Datum wie die Build-Nummer zu verwenden: 080803-1448

Beantwortet am 03/08/2008 um 19:46
quelle vom benutzer

stimmen
2

[Visual Studio 2017 CSPROJ Eigenschaften]

Automatisch an Ihrer Package / Version / Assembly Eigenschaft (oder jede andere Eigenschaft) zu aktualisieren, zunächst eine neue erstellen Microsoft.Build.Utilities.TaskKlasse , die Ihre aktuelle Build - Nummer erhalten wird und die aktualisierte Nummer zurückzuschicken (ich empfehle ein separates Projekt zu erstellen , für diese Klasse).

Ich manuell aktualisieren , die major.minor Zahlen, aber wir MSBuild , um automatisch die Build - Nummer zu aktualisieren (1.1. 1 , 1.1. 2 , 1.1. 3 usw. :)

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

}

Dann rufen Sie Ihre kürzlich erstellte Aufgabe auf MSBuild Prozess den nächsten Code auf Ihrer CSPROJ Datei hinzufügen:

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

Wenn Visual Studio Pack Projektoption Kommissionierung (nur ändern BeforeTargets="Build"die Aufgabe vor Build für die Ausführung) der RefreshVersion Code wird die neue Versionsnummer berechnen ausgelöst werden, und XmlPokeAufgabe wird Ihre CSPROJ Eigenschaft entsprechend aktualisieren (ja, es wird die Datei ändern).

Wenn mit NuGet Bibliotheken arbeiten, ich das Paket auch einfach nur mit dem nächsten Build-Task des vorherigen Beispiel zu NuGet Repository senden.

<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\nugetist , wo ich die NuGet Client ( nicht vergessen speichern Sie Ihren NuGet API - Schlüssel durch den Aufruf habe nuget SetApiKey <my-api-key>oder enthält die Schlüssel auf dem NuGet Push - Aufruf).

Nur für den Fall hilft es jemand ^ _ ^.

Beantwortet am 10/05/2017 um 14:08
quelle vom benutzer

stimmen
1

Vor einiger Zeit habe ich ein quick and dirty exe, dass die Version # 's in einem Assembly aktualisieren würde {cs / vb} -. Ich habe auch verwendet rxfind.exe (eine einfache und leistungsfähige regex-basierte Suche ersetzen Werkzeug) das zu tun aktualisieren von einer Befehlszeile als Teil des Erstellungsprozesses. Ein paar andere helpfule Hinweise:

  1. trennen die Assembly in Produktteile (Firmenname, Version, etc.) und Montage bestimmter Teile (Montagename etc.). sehen Sie hier
  2. Auch - ich benutze Subversion, so fand ich es hilfreich, die Build-Nummer Subversion-Revisionsnummer zu setzen, wodurch es einfach immer wieder auf die Code-Basis zu erhalten, die die Montage erzeugt (zB 1.4.100.1502 wurde von Revision 1502).
Beantwortet am 04/08/2008 um 20:51
quelle vom benutzer

stimmen
0

Wenn Sie eine Auto - Inkrementierung Zahl wollen , die jedes Mal aktualisiert eine Zusammenstellung erfolgt ist, können Sie mit VersionUpdater aus einem Pre-Build - Ereignisse. Ihre Pre-Build - Ereignis kann die Build - Konfiguration überprüfen , ob Sie es vorziehen , so dass die Versionsnummer nur für einen Releasebuild (zum Beispiel) erhöht wird.

Beantwortet am 28/02/2010 um 22:16
quelle vom benutzer

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