Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
AnkhSVN Revision Nummer in Build einbeziehen
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

Themenstarter:

AnkhSVN Revision Nummer in Build einbeziehen

beantworten | zitieren | melden

Hallo!

Ich benutze aktuell AnkhSVN, um einen SVN Support für mein Visual Studio 2010 Professional zu bekommen. Nun brauche ich das aktuell für eine Software, von der ich regelmäßig einen Build auf den Server ziehe, wo das programm dann drauf läuft. Nun möchte ich wissen, zu welcher Revision die Version gehört, also die aktuelle Revision Nummer in die Datei & Assembly Version mit einbeziehen. Ich habe da schon etwas länger gesucht, aber noch nichts gefunden. Es geht mir hierbei um die SVN Revision Nummer, also einfach einen * benutzen funktioniert nicht.

Lieben Gruß

pdelvo
private Nachricht | Beiträge des Benutzers
Blacal
myCSharp.de - Member



Dabei seit:
Beiträge: 392

beantworten | zitieren | melden

Hi,

direkt über AnkhSVN wirds wohl nicht gehen. Ich würde eher versuchen, eventuell durch ein WebService Aufruf auf den SVN-Server oder ein Kommandozeilentool, die aktuelle Revisionsnummer rauszufinden und über ein Script ins eigene Coding einzubauen. Eventuell sogar im Postbuild-Ereignis.

Falls du eine Lösung in die Richtung findest, könntest du diese hier bitte Posten. Wär eigentlich keine schlechte Idee, sowas auch bei unseren SVN-Projekten mit einzubauen.

edit: Oder schau dir mal den svn Kommandozeilen-Client an. In Kapitel 9. Die komplette Subversion Referenz: svnlook gibt es zum Beispiel ein Befehl, mit dem du vielleicht an die Revisionsnummer kommst (jetzt nicht getestet).

Gruß
Roland
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Blacal am .
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

Themenstarter:

beantworten | zitieren | melden

Ich hab mir gerade was gebastelt, eher quick & dirty, aber es funktioniert und reicht für mich erst mal. Das ganze aktualisiert jeweils nur die Assembly Version. Ich habe es nicht hinbekommen, die Dateiversion auch zu aktualisieren. Gebraucht wird das ILMerge Tool, sowie die SharpSVN Bibliothek.

    class Program
    {
        static void Main(string[] args)
        {
            string assembly = args[0];
            string repoPath = args[1];
            string ilmerge = @"%PROGRAMFILES(X86)%\Microsoft\ILMerge\ILMerge.exe";
            ilmerge = Environment.ExpandEnvironmentVariables(ilmerge);

            Version version = GetAssemblyVersion(assembly);

            using (SvnClient client = new SvnClient())
            {
                SvnInfoEventArgs info;
                Uri repos = new Uri(repoPath);
                client.GetInfo(repos, out info);
                version = new Version(version.Major, version.Minor, version.Build, (int)info.Revision);
            }
            string param = "";
            if (File.Exists(assembly + "_old.exe"))
                File.Delete(assembly + "_old.exe");
            File.Move(assembly, assembly + "_old.exe");
            Process p = Process.Start(ilmerge, param = string.Format("/ver:{0} /out:{1} {2}", version, assembly, assembly + "_old.exe"));
            p.WaitForExit();
            File.Delete(assembly + "_old.exe");
        }

        private static Version GetAssemblyVersion(string assembly)
        {
            Assembly asm = Assembly.Load(File.ReadAllBytes(assembly));
            return asm.GetName().Version;
        }
    }

Dann als Postbuildereignis
"H:\Pfad\zum\Tool.exe" $(TargetPath) "https://schlag-mich-tod/svn/wasweissich/"

Wie gesagt eine Fehlerbehandlung fehlt, aber da hab ich aktuell keine Lust zu. Wer es benutzen will kann das ja noch einbauen. Wenn trotzdem jemand etwas eleganteres kennt, würde ich mich über weitere Antworten freuen! :)
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 656

beantworten | zitieren | melden

Wir benutzen CruiseControl.net als Werkzeug für Continuous Integration, und da bekommt man in seinen Plugins auch Informationen über den aktuellen SCM Stand - mit ein bisschen Plugin Coding (gibts genug Beispiele) läuft bei uns ein Modifier drüber, der nach dem Update (und vor dem Build) alle AssemblyInfo.cs durchläuft und als AssemblyFileVersion die Standard AssemblyVersion plus die Revisionsnummer als letzte Stelle einträgt.

Für kleine Projekte, die nicht über CCNet laufen habe ich mir seinerzeit ein T4 Template geschrieben, was mir einfach die AssemblyInfo.cs aus den SVN Sandboxes generiert - funktioniert aber nicht mit Subversion 1.7 (wo sich die Sandboxes geändert haben), und alles unter 1.6 habe ich nicht getestet. Erfordert auch vorher ein Update, damit die Sandbox aktuell ist, aber ich denke dass das kein Problem darstellen sollte.

Selbst wenn dir beides nicht direkt was bringt, könnte es zumindest als Inspiration für was eigenes herhalten.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BhaaL am .
Attachments
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

TeamCity hat auch einen AssemblyVersionPatcher.

Ansonsten einfach mal in [FAQ] Automatisches Vergeben der Revisions- und Buildnummer gucken. Das ist doch direkt das Problem - die Aufnahme der SVN-Revisionsnummer in die AssemblyVersion.
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

Themenstarter:

beantworten | zitieren | melden

Hab es jetzt wie in der FAQ gelöst, auch wenn mir das ändern der AssemblyInfo Datei nicht gefällt, da die dann immer als Update auf dem Server landet :/
private Nachricht | Beiträge des Benutzers
Marsti
myCSharp.de - Member



Dabei seit:
Beiträge: 124

beantworten | zitieren | melden

Irgendwie klingt das aus der FAQ recht umständlich. Man kann ja über Platzhalterbefehle die aktuelle SVN-Version in die Datei schreiben lassen, man muss nur dann dafür sorgen, dass man den Platzhalterbefehl beim Ausgeben wieder entfernt und beim Prebuildprozess in die Codedatei z.B. das aktuelle Datum und Uhrzeit reinschreibt (damit die geändert ist und die SVN-Version aktualisiert wird; dabei könnte man dann auch die AssemblyVersion ohne den Platzhalterbefehl setzen).
private Nachricht | Beiträge des Benutzers