Versionierung in Visual Studio der c++ dlls und executables



  • Hallo

    Versionierung von exen und dlls ist immer so ein Thema zu dem man keine so wirklich glückliche Lösung im Internet findet.
    Bisher haben wir bei unseren c++ und auch c# Projekte die version in der Form

    MAJOR.MINOR.BUILDNUMBER.REVISION

    so angepasst dass wir Major, Minor und Buildnumber händisch erhöht haben und in Revision die Revisionsnummer aus Subversion hineinformatiert haben.

    Wir sind nun aber auf git umgestiegen und die Revisionsnummer steht so nicht mehr zur Verfügung.

    Wie versioniert ihr? Was kann man automatisieren? Wie kann ich nen bezug zum Gitrepository herstellen. Ähnlich der Revisionsnummer aus subversion.

    Das Tool autobuildversion habe ich mir mal installiert.
    https://archive.codeplex.com/?p=autobuildversion

    Aber scheint unter VS2017 nicht zu funktionieren. Lässt sich zwar installieren und auch bedienen. Allerding egal was ich einstelle meine Version in meinem .rc File wird nicht erhöht.



  • mit

    git describe
    

    kann man eine für den nutzer lesbare info erzeugen. Wobei die AFAIK abhängig von tags ist.

    https://stackoverflow.com/questions/4120001/what-is-the-git-equivalent-for-revision-number



  • @firefly

    Hallo firefly. Ja das habe ich auch schon gefunden. Nicht den Link. Aber die Möglichkeit des Taggens.
    Das Problem das ich dabei noch habe dass ich in meinem Repository mehrere dlls habe (genau genommen 2, als Informatiker verallgemeinert man ja immer gerne 🙂 )

    Taggen kann man in git immer nur das ganze Repository. In svn hatte ja jedes Verzeichnis immer nur die Revisionsnummer bei der zuletzt was geändert wurde.

    So konnte man dann immer jeder dll oder auch exe die Nummer aus seinem Verzeichnis verpassen.
    Gut Ideal war das auch nicht.

    DLL-A -> Version 1
    DLL-B -> Version 1

    DLL-A geändert -führt zu DLL-A Version 2 DLL-B Version 1
    DLL-B geändert -führt zu DLL-A Version 2 DLL-B Version 3



  • @booster sagte in Versionierung in Visual Studio der c++ dlls und executables:

    Taggen kann man in git immer nur das ganze Repository. In svn hatte ja jedes Verzeichnis immer nur die Revisionsnummer bei der zuletzt was geändert wurde.

    So konnte man dann immer jeder dll oder auch exe die Nummer aus seinem Verzeichnis verpassen.
    Gut Ideal war das auch nicht.

    Diese Versionierung ist sicher irgendwie auch mit Git möglich - schliesslich sind einige Tools in der Lage für ein gegebenes Verzeichnis den letzten relevanten Commit anzugeben. git describe lässt sich dann für eben diesen Commit ausführen.

    Allerdings finde ich das innerhalb eines einzigen Projekts/Repository etwas verwirrend und unnötig kompliziert. Von Dateien, die aus dem selben Build eines Repository stammen, würde ich eigentlich intuitiv erwarten, dass sie alle auch die gleiche Version haben, besonders wenn die DLLs eine logische Einheit bilden, sich also zurecht im selben Repository befinden. Sollte letzteres nicht der Fall sein, macht es eventuell Sinn, diese in separate Repositories auszulagen und diese z.B. als Submodule zu deinem Repository hinzuzufügen.

    Falls es also irgendwann mal passieren könnte, dass du für ein späteres Projekt mal ausschließlich DLL-B benötigst, jedoch nicht DLL-A, dann kann ich dir nur nahelagen, das Projekt möglichst gleich in mehrere Repositories aufzusplitten. Das wird dann im weiteren Verlauf einfacher zu handhaben sein.

    Ansonsten verwende ich auch describe um meine Versions-Strings automatisch zusammenzubauen, und zwar in der Form git describe --long --tags --dirty --always, was dann letztendlich z.b. so aussieht:

    1.1.2-30-g32ae871-dirty

    <letztes Tag>-<Commits seit Tag>-<kurzer Commit Hash>-<Dirty-Flag (wenn es nicht-commitete Änderungen gibt)>

    Dabei erzeuge ich den String per Skript so, dass nur für die Eindeutigkeit notwendige Informationen in dem String landen. Die Anzahl der Commits seit dem Tag sowie die Kurzform des Commit Hash werden z.b. nur angefügt, wenn das Commit nicht mit dem Tag übereinstimmt. Für das "Release 1.1.2", also genau den Commit, der mit "1.1.2" getaggt ist, wird also eben nur kurz und bündig 1.1.2 als Versions-String erzeugt.



  • @Finnegan

    Danke für deine Antwort. Hätte da noch ein paar Fragen dazu

    • Wo trägst du die Version ein. Produktversion oder Fileversion
    • Wie verhinderst du das die .rc Datei automatisch von VS wieder neu generiert wird und somit die gesetzten Werte überschrieben werden

Log in to reply