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 ...
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
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.
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.
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.
Tags und Links tfs visual-studio-2012 msbuild tfsbuild vsts