automatische Version bei Visual Studio Projekten
Um die Veränderung von Versionsnummern bei Visual Studio Projekten zu automatisieren habe ich heute ein interessantes Projekt entdeckt, dass dies durch einen MSBuild Task erledigt.
Mit Hilfe dieses Tools ist es möglich bei jedem Build die Versionsnummer automatisch zu erhöhen und sogar das aktuelle Datum in der Versionsnummer zu integrieren.
Und so geht’s:
Installation
- AssemblyInfo Task herunterladen, entpacken und installieren. Dabei merken was man bei der Installation auswählt ("Global Assembly Cache" oder "User’s Application Data Folder")
- Das zu versionierende Projekt in Visual Studio öffnen
- mit einem "Rechts-Klick" auf das Projekt im Projektmappen-Explorer klicken und "Projekt entladen" auswählen.
- mit einem "Rechts-Klick" auf das Projekt im Projektmappen-Explorer klicken und "Bearbeiten <Projektname>" auswählen.
- Je nachdem wo AssemblyInfoTask installiert wurde folgende Zeile nach dem letzten <Import> Tag einfügen:
- Installation in "Global Assembly Cache":
- Installation in "User’s Application Data Folder"
<Import Project="$(MSBuildExtensionsPath)\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.Targets"/>
<Import Project="$(APPDATA)\Microsoft\MSBuild\AssemblyInfoTask\Microsoft.VersionNumber.Targets"/>
- Installation in "Global Assembly Cache":
- Projektdatei speichern und schließen.
- mit einem "Rechts-Klick" auf das Projekt im Projektmappen-Explorer klicken und "Projekt erneut laden" auswählen.
Anpassungen (wichtig!)
Als letztes muss die Versionierung angepasst werden, da standardmäßig das Format yymmdd benutzt wird, was allerdings zu Fehlern führt da UInt16 als Datenstruktur für die Numerierung verwendet wird und somit nur Zahlen bis 65535 erlaubt sind.
- Je nach Installationsort die Datei "Microsoft.VersionNumber.Targets" im entsprechenden Verzeichnis in einem editor öffnen.
- <Ordner Anwendungsdaten des Benutzers>\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.Targets
- <Ordner MSBuild im Programme-Verzeichnis>\Microsoft\MSBuild\AssemblyInfoTask\Microsoft.VersionNumber.Targets
- Hier kann die Vergabe der Nummern verändert werden. Die Versionsnummern haben die Form A.B.C.D mit
- A major version
- B minor version
- C build number
- D revision
- Die Einträge <….Type> sagen was für eine Numerierung verwendet werden soll. Möglich sind keine Änderung (NoIncrement), Datum (DateString) und autoinkrement (AutoIncrement).
- Die Einträge <…Format> geben das Format der numreierung an.
- Bei DateString muss man darauf achten, dass die resultierende Zahl kleiner als 65535 ist. (yyMMdd was z.B. 080317 für Heute entsprechen würde ist nicht möglich! – MMdd was 0317 wäre geht aber.) genaueres Hier
- Bei AutoIncrement gibt die Zahl die erste verwendete Zahl an
- Datei speichern und fertig!
Update
Wenn man svn zusammen mit Visual Studio benutzt gibt es Probleme, da AssemblyInfoTask rekursiv durch die Verzeichnisse geht und nach AssemblyInfo.* sucht. SVN erstellt allerdings schreibgeschützte Verzeichnisse wo ebenfalls solche Dateien gefunden werden. Um das ganze zu beheben muss man die Zeile in der oben erwähnten Datei Microsoft.VersionNumber.targets ersetzen:
Original:
<AssemblyInfoFiles Include="**\AssemblyInfo.*"/>
durch folgende Zeile ersetzen:
<AssemblyInfoFiles Include="**\AssemblyInfo.*" Exclude="**\.svn\**\*.*" />
So werden alle Verzeichnisse die .svn enthalten ausgelassen.


danach habe ich schon lange gesucht !!!
Tip: Um bei einer anderen Projektmappe eine andere Versionierung verwenden zu können, kann die Zeile
in
geändert werden. Dann ist natürlich auch die Datei ‘Microsoft.VersionNumber.Targets’ im Projektordner als ‘MeinProjektName.VersionNumber.Targets’ abzulegen und kann individuell angepasst werden. Die Änderungen werden erst nach einem Neustart von VS und dem nächsten Build wirksam …
Hi traudi!
Vielend Dank für den Kommentar, allerdings ist dein vorschlag wohl irgendwo untergegangen. Vielleicht kanns Du mir den schicken und ich vervollständige Deinen Kommentar.