396 Stimmen

Kann ich die Build-Version der Datei automatisch erhöhen, wenn ich Visual Studio verwende?

Ich habe mich nur gefragt, wie ich automatisch den Build (und die Version?) meiner Dateien mit Visual Studio (2005) zu erhöhen.

Wenn ich die Eigenschaften von beispielsweise C:\Windows\notepad.exe Auf der Registerkarte Version wird "Dateiversion: 5.1.2600.2180" angezeigt. Ich möchte diese coolen Zahlen auch in der Version meiner DLLs haben, nicht in der Version 1.0.0.0, die, seien wir ehrlich, ein bisschen langweilig ist.

Ich habe ein paar Dinge ausprobiert, aber es scheint keine Out-of-Box-Funktion zu sein, oder vielleicht suche ich auch nur an der falschen Stelle (wie immer).

Ich arbeite hauptsächlich mit Webprojekten....

Ich habe mir beide angesehen:

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

und ich konnte es nicht glauben, dass so viel Aufwand für eine Sache üblich ist.

EDIT: Es funktioniert nicht in VS2005, soweit ich das beurteilen kann ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )

18voto

Installieren Sie die Build Version Inkrement Add-in. Damit haben Sie viel mehr Kontrolle als mit der Option *.

13voto

Bob Punkte 93584

Um die Versionsnummern zu erhalten, versuchen Sie

 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
 System.Reflection.AssemblyName assemblyName = assembly.GetName();
 Version version = assemblyName.Version;

Um die Versionsnummer festzulegen, erstellen/bearbeiten Sie AssemblyInfo.cs

 [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyFileVersion("1.0.*")]

Nebenbei bemerkt ist die dritte Zahl die Anzahl der Tage seit dem 1.2.2000 und die vierte Zahl die Hälfte der Gesamtsekunden des Tages. Wenn Sie also um Mitternacht kompilieren, sollte die Zahl Null sein.

10voto

Madacol Punkte 2470

In Visual Studio 2019

Das reichte mir nicht aus, um die

[assembly: AssemblyVersion("1.0.*")]

Beim Erstellen wird folgende Fehlermeldung ausgegeben

Die angegebene Versionszeichenfolge entspricht nicht dem erforderlichen Format

Lösung

Das Format wurde schließlich akzeptiert, nachdem ich die Deterministic a False en project.csproj

<Deterministic>false</Deterministic>

Edita:

Aus irgendeinem Grund ist die Einstellung Deterministic a False Ich habe meine Konfigurationsdatei durcheinander gebracht, indem ich sie an verschiedenen Orten geladen und gespeichert habe.

Umgehung:

Ich habe ein Post-Build-Ereignis eingerichtet, um die Revisionsnummer zu erhöhen:

Batch-Skript "Post-Build-Ereignis

Dies ruft ein Powershell-Skript namens autoincrement_version.ps1 und übergibt als Argument den Pfad von AssemblyInfo.cs

if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)

Poweshell-Skript

Es erhöht die Revisionsnummer automatisch mit Hilfe von Regex

param( [string]$file );
  $regex_revision = '(?<=Version\("(?:\d+\.)+)(\d+)(?="\))'
  $found = (Get-Content $file) | Select-String -Pattern $regex_revision
  $revision = $found.matches[0].value
  $new_revision = [int]$revision + 1
  (Get-Content $file) -replace $regex_revision, $new_revision | Set-Content $file -Encoding UTF8

8voto

Dirk Vollmar Punkte 166522

Das Setzen eines * in der Versionsnummer in AssemblyInfo oder unter Projekteigenschaften, wie in den anderen Beiträgen beschrieben, funktioniert nicht mit allen Versionen von Visual Studio / .NET.

Afaik es funktionierte nicht in VS 2005 (aber in VS 2003 und VS 2008). Für VS 2005 könnten Sie das Folgende verwenden: Automatisches Erhöhen der Build- und Revisionsnummer der Visual Studio 2005-Version beim Kompilieren .

Beachten Sie jedoch, dass die automatische Änderung der Versionsnummer bei stark benannten Baugruppen nicht zu empfehlen ist. Der Grund dafür ist, dass alle Verweise auf eine solche Assembly jedes Mal aktualisiert werden müssen, wenn die referenzierte Assembly neu erstellt wird, da Verweise auf Strong-Name-Assemblies immer einen Verweis auf eine bestimmte Assembly-Version darstellen. Microsoft selbst ändert die Versionsnummer der .NET Framework-Assemblies nur, wenn es Änderungen an den Schnittstellen gibt. (NB: Ich suche immer noch nach dem Link in MSDN, wo ich das gelesen habe).

6voto

Andreas Reiff Punkte 7205

Um inkrementelle (DateTime) Informationen in die AssemblyFileVersion Eigenschaft zu bekommen, was den Vorteil hat, dass keine Abhängigkeiten gebrochen werden.


Aufbauend auf Boogs Lösung (funktionierte nicht für mich, vielleicht wegen VS2008?), können Sie eine Kombination aus einem Pre-Build-Ereignis, das eine Datei generiert, das Hinzufügen dieser Datei (einschließlich seiner Versionseigenschaften) und dann mit einer Möglichkeit, diese Werte wieder auszulesen verwenden. Das ist

Pre-Build-Event:

echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs

Fügen Sie die resultierende Datei VersionInfo.cs (Unterordner Properties) in Ihr Projekt ein

Code, um das Datum zurückzubekommen (von Jahren auf Sekunden heruntergerechnet):

var version = assembly.GetName().Version;
var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
Version fileVersion = new Version(fileVersionString);
var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);

Nicht sehr komfortabel.. auch, ich weiß nicht, ob es eine Menge von Kraft-Erneuerungen schafft (da eine Datei immer ändert).

Sie könnten es zum Beispiel intelligenter machen, indem Sie die Datei VersionInfo.cs nur alle paar Minuten/Stunden aktualisieren (indem Sie eine temporäre Datei verwenden und dann die echte VersionInfo.cs kopieren/überschreiben, wenn eine ausreichend große Änderung festgestellt wird). Ich habe das einmal ziemlich erfolgreich gemacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X