ChangeSet-Nummer in Version Info mit Hosted TFS

8

Wir verwenden den Team Foundation Service anstelle eines lokalen TFS. Unsere Lösung wurde auf Visual Studio 2012 erstellt. Mein Problem ist jetzt, dass wir möchten, dass alle Assemblies dieselbe Versionsnummer haben (dieser Teil wurde bereits gelöst, indem eine CommonAssemblyInfo.cs verwendet wurde, die in alle Projekte eingebunden ist). Das Problem, mit dem ich gerade konfrontiert bin, ist, dass wir die tfs changeset-Nummer an der letzten Stelle der Assembly-Version benötigen (z. B. 1.0.0.4711, wobei 4711 die Änderungssatznummer ist). Ich habe mehrere Beispiele gefunden, aber keiner von ihnen hat für mich funktioniert. Und ja, ich habe hier besonders auf stackoverflow viel gesucht.

Ich muss auch zugeben, dass ich nie in die MSBuild-Skripte geschaut habe ...

Kann mir bitte jemand einen Hinweis geben, wie das zu erreichen ist? Ist es beispielsweise möglich, das MSBuild Extension Pack auf dem Team Foundation Service (nicht lokal TFS) zu verwenden und wenn, wie geht das?

Wie immer ist die Zeit mein schlimmster Feind ...

    
AlexK 05.02.2013, 14:10
quelle

3 Antworten

2

Beachten Sie, dass Tfs ab 2010 einen Windows-Workflow zum Erstellen des Pakets verwendet. Der Workflow ruft msbuild nur zum Kompilieren der Projekte auf - während es möglich ist, Changeset auf diese Weise an msbuild zu übergeben, ist es mehr Hops. Im Folgenden wird auf Ihr Problem eingegangen, jedoch ist die verknüpfte Lösung komplexer als benötigt: Die Assembly-Version wurde automatisch mit jedem TFS 2010 aktualisiert Erstellen?

Dies ist eines der besten Tutorials zu den benutzerdefinierten Build-Aktivitäten, der Autor ist auch auf dem Stack, glaube ich, insbesondere in Bezug auf die Versionierung Ссылка

Kurz gesagt, Sie benötigen eine benutzerdefinierte Aktivität, die vor der Kompilierung auf Quelldateien ausgeführt wird, alle CommonAssemblyInfo.cs-Dateien findet, diese Liste an Ihre benutzerdefinierte Aktivität füttert, die darin enthaltenen Werte mit dem übergebenen Wert der vollständigen Versionsnummer oder nur das Änderungsset ändert und Option check in die Änderung (wahrscheinlich nicht, da Ihr changeset dann nicht mehr synchron ist).

Sie können auch einen Blick auf Ссылка Menge von Aktivitäten werfen, zwischen denen es eine TfsVersion-Aktivität gibt, zumindest wird es Beispiele geben .

Funktionalität muss hierfür über den Team Explorer und die Quellcodeverwaltung verfügbar sein - Die benutzerdefinierten Aktivitätsassemblys und Build-Vorlagen befinden sich normalerweise im Ordner Ihres Teamprojektstammverzeichnisses - der Speicherort dieses Ordners ist für den Build-Controller definiert, durch den Sie dies ändern können Team Explorer Bauabschnitt.

Changeset ist ab dem Wert BuildDetail.SourceGetVersion verfügbar, nicht sicher, ob dies 2012 behoben / geändert wurde, aber es gab 2010 zwei Probleme mit diesem Wert

  1. Es ignoriert die GetVersion-Überschreibung in der Standard-Build-Vorlage - Sie müssen sie manuell aktualisieren, wenn die Überschreibung verwendet wird
  2. Wenn der letzte Build (keine Überschreibung) ausgeführt wird, wird die letzte Änderungssatznummer von tfs abgerufen - abhängig von Ihren Niederlassungen ist dies möglicherweise nicht derselbe wie der letzte Änderungssatz für den Zweig des Builds. Sie müssen entweder damit leben, Überschreibungen für jeden Build bereitstellen oder Aktivitäten implementieren, die den Zweigverlauf auf den letzten Änderungssatzwert überprüfen und ihn dann erneut überschreiben.

Es sollte beachtet werden, dass GetVersion in der Lage sein sollte, jede Quellenversion zu akzeptieren - Changeset, Datum, Label usw. Ich habe nicht genug mit Ihnen gespielt, um Ihnen mehr Details zu geben.

    
drk 06.02.2013 11:15
quelle
0

Ich habe Wintellect-Lösung - MSBuild-only, keine TFS-Magie benötigt. Ich habe auch die automatisch generierte CSharp-Datei hinzugefügt:
[assembly:AssemblyInformationalVersion("$(BuildNumber)")]
So bekomme ich die TFS-Build-Nummer.

    
Jonathan 06.02.2013 13:47
quelle
0

Colin Dembovsky schrieb einen großen Überblick über Versionseinbettung mithilfe der neuen Vorbuildskripteinstellung in TFS 2013-Builddefinitionen .

Die Changeset-Nummer ist innerhalb des Pre-Build-Prozesses in der Umgebungsvariablen TF_BUILD_SOURCEGETVERSION leicht zugänglich. Ich konnte dies verwenden, um den Changeset-Wert in unsere Binärdateien einzubetten, indem wir ein Skript verwenden, das auf Dembovskys oben beschriebener Arbeit basiert. (Ich habe Perl verwendet, nicht Powershell, also willst du es wahrscheinlich nicht sehen ;-))

Dieser Ansatz erfordert keine Änderungen am Build-Workflow, was ihn zu einem großen Gewinn macht.

    
Jeff Youngstrom 11.06.2014 17:41
quelle