2010-01-08 5 views
20

ich die Ausgabe von meinem Teamcity Build-Konfiguration meiner Klassenbibliothek anpassen möchten, so dass die erzeugte DLL-Dateien die folgende Versionsnummer haben: 3.5.0.x, wobei x die Subversion-Revisionsnummer, die TeamCity abgeholt hat.machen Teamcity die Subversion-Build-Nummer in die Montageversion integrieren

Ich habe festgestellt, dass ich die Umgebungsvariable BUILD_NUMBER verwenden kann, um x zu bekommen, aber leider verstehe ich nicht, was ich sonst noch tun muss.

Die „Tutorials“ Ich finde alle sagen, „du nur auf das Skript hinzufügen“, aber sie sagen nicht die Skript, und „das“ in der Regel bezieht sich auf die Assembly Aufgabe aus der MSBuild Community-Erweiterungen.

Muss ich irgendwie ein benutzerdefiniertes MSBuild-Skript erstellen, um dies zu verwenden? Ist das "Skript" identisch mit der Lösungsdatei oder der C# -Projektdatei?

Ich weiß nicht viel über den MSBuild-Prozess überhaupt, außer dass ich eine Lösungsdatei direkt an MSBuild übergeben kann, aber was ich "das Skript" hinzufügen muss, ist XML, und die Lösungsdatei nicht entschieden sehe aus wie XML.

Also, kann mich jemand zu einem Schritt-für-Schritt-Punkt-Anleitung, wie diese Arbeit zu machen?


Dies ist, was ich am Ende mit:

  1. die den Boden installierte MSBuild Community Tasks
  2. Bearbeiten, um die Datei CSPROJ meine Kernklassenbibliothek, und so ändern, dass es lautet:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
    <Target Name="BeforeBuild"> 
        <AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' " 
         CodeLanguage="CS" 
         OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs" 
         AssemblyVersion="3.5.0.0" 
         AssemblyFileVersion="$(BUILD_NUMBER)" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    

  3. Ändern Sie alle meine AssemblyInfo.cs-Dateien, so dass sie nicht AssemblyVersion oder AssemblyFileVersion angeben (im Rückblick, ich werde in AssemblyVersion setzen zurück)

  4. Hinzugefügt einen Link zu der jetzt globalen GlobalInfo.cs, die nur befindet außerhalb aller Projekt
  5. diese Datei Stellen sie sicher, einmal gebaut, so dass ich eine Standarddatei in die Quellcodeverwaltung haben

Dies wird nun GlobalInfo.cs nur dann, wenn die Umgebungsvariable BUILD_NUMBER wird aktualisiert, was es ist wenn ich durch TeamCity baue.

Ich entschied mich für das Halten Assembly konstant, so dass immer noch Referenzen zu arbeiten, und nur Assembly aktualisieren, so dass ich von welcher bauen eine DLL ist zu sehen.

Antwort

18

Die Csproj Datei ist effektiv eine MSBuild-Datei.

Unload die betreffende Klasse Projekt in VS.NET, bearbeiten und kommentieren Sie die BeforeBuild Ziel. Fügen Sie die MSBuild-Aufgabe FileUpdate von den MSBuild Community Extensions hinzu.

In Ihrer MSBuild-Datei können Sie die BUILD_NUMBER von TeamCity mithilfe der Umgebungsvariablen $(build_vcs_number_1) abrufen. Beachten Sie, dass Sie möglicherweise eine zusätzliche Konfiguration für die 'Produktion' erstellen möchten, in der Sie suchen, da dies natürlich nicht funktioniert, wenn Sie lokal erstellen.

Verwenden Sie diese einfach als Eingabe für die Eigenschaft ReplacementText der FileUpdate-Aufgabe.

Beachten Sie, dass wenn Ihre Revisionsnummern über die 65535-Markierung (UInt16) hinausgehen, Sie sie nicht im AssemblyVersion-Attribut verwenden können.

Was ich vorschlagen würde Sie stattdessen verwenden, ist AssemblyInformationalVersion, die nur eine Zeichenfolge ist, die diese Einschränkung nicht hat. Es sei denn natürlich, Sie sind zuversichtlich, dass Sie diese obere Grenze der Revision nicht treffen werden, aber das scheint eine zwiespältige Art und Weise zu gehen.

Alternativ können Sie einen Weg (a.b.c.d ist Ihre Versionsnummer) der Verwendung von Revision div 1000 für c und Revision mod 1000 für d.

12

In TeamCity 6.5 ist dies SEHR EINFACH zu erreichen mit AssemblyInfo patcher.

  • Gehen Sie zum Build-Konfigurationsschritt 3 "Build Steps";
  • Klicken Sie auf "Build-Funktion hinzufügen";
  • Wählen Sie den Feature-Typ "AssemblyInfo patcher";
  • Geben Sie an, was Sie als Version möchten. Ich benutze: %system.build.number%
+1

Leider ihre Patcher nicht [derzeit] (http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher) ermöglichen eine deutliche 'AssemblyVersion' und' AssemblyFileVersion' Werte angeben . – ladenedge

+1

Ihr Vorschlag ist sehr nützlich in Szenarien, in denen es wichtig ist, die Build-Nummer zu verfolgen: Danke! – faester

+1

Mann Ich wollte eine Menge Scheiß-Code machen, nur um das in meinen Code zu bekommen. Du hast mir 2 oder 3 Arbeitstage erspart! –

Verwandte Themen