Frage

Wir wollen, dass unsere überschriebene Build-Ziele in einer externen Datei speichern und zu schließen, dass die Ziele in den TFSBuild.proj Datei. Wir haben eine Reihe Schritte Kern, was geschieht, und möchte diese zusätzlichen Schritte bekommen, indem einfach die Importleitung zum TFSBuild.proj vom Assistenten erstellt.

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets"/>

Wir können nicht einen Import auf eine beliebige Datei in der $(SolutionRoot), weil zum Zeitpunkt der Import-Anweisung bestätigt haben, hat sich die Quelle nicht aus dem Repository abgerufen werden. Es sieht aus wie TFS ist die TFSBuild.proj Herunterziehen zuerst ohne andere Dateien.

Auch wenn wir einen bedingten Import, die Version in der Quellcodeverwaltung hinzufügen, nicht wenn vorhanden importiert werden. Die vorherige Version, die bereits auf der Festplatte importiert werden.

Wir geben die, bauen dort mit der Quelle zu speichern, aber es ist die erste Abhängigkeit aus unserem Quellbaum zu bewegen, so sind wir zögern, es zu tun.

Gibt es eine Möglichkeit, um entweder:

  1. Tell Team Build noch ein paar Dateien herunterzuziehen, so dass diese Import Aussagen richtig zu bewerten?
  2. Ignoriere diejenigen Teamziele beim Aufbau wie AfterCompile in einer Weise neben der Import?
  3. Letztlich Ziele in Team Build laufen bauen, die unter der Quelle zu bauen es versucht gehalten werden?
War es hilfreich?

Lösung

Das Team Build hat eine „Bootstrap“ Phase, in der alles im Team Build-Konfigurationsordner (der Ordner mit TFSBuild.proj) aus der Versionskontrolle heruntergeladen wird. Dies wird durch den Build-Agenten vor dem Build-Agenten ausgeführt Anrufe MSBuild.exe es zu sagen TFSBuild.proj auszuführen.

Wenn Sie Ihre Ziele Datei unter SolutionRoot bewegen und legen Sie sie in Ihrem Konfigurationsordner neben dem TFSBuild.proj Datei, die Sie dann in der Lage sein, es in Ihrer TFSBuild.proj-Datei importieren eine relative Importanweisung heißt mit.

<Import Project="myTeamBuild.targets"/>

Wenn diese Ziele auf zusätzliche benutzerdefinierte MSBuild Aufgabe Baugruppen verlassen, dann können Sie sie auch im selben Ordner wie die Datei TFSBuild.proj haben und Sie können sie leicht einen relativen Pfad verweisen.

Beachten Sie, dass in TFS2008, die Build-Konfiguration Ordner standardmäßig unter $ / Teamproject / TeamBuildTypes jedoch zu sein, ist es nicht da sein muss. Es kann tatsächlich in einem Ordner lebt, das in Ihrer Lösung ist - und kann sogar ein Projekt in Ihrer Lösung Team Build gewidmet sein. Dies hat mehrere Vorteile einschließlich der Herstellung Verzweigung des Build einfacher. Deshalb habe ich in der Regel meine Build in einem Ordner wie folgt zu finden:

$/TeamProject/main/MySolution/TeamBuild

Beachten Sie, dass standardmäßig während der Bootstrap-Phase des Build, wird der Build-Agent nur Dateien herunterladen, die in den Build-Konfigurationsordner und werden Rekursion nicht in allen Unterordnern nach unten. Wenn Sie es, um Dateien in Unterordner während der Bootstrap-Phase wollen, dann können Sie die folgende Eigenschaft in dem appSettings der tfsbuildserver.exe.config-Datei auf den Build-Agenten Maschinen gesetzt (in% Programfiles% \ Visual Studio 9.0 \ Common7 \ IDE \ Private)

<add key="ConfigurationFolderRecursionType" value="Full" />

Man beachte, dass, wenn Sie mehr Build-Agenten hätten Sie diese Einstellung merken müssen auf allen Maschinen zu setzen, und es wäre von diesem Build-Agenten jeden Build ausgeführt beeinflussen - so wirklich ist es am besten nur in der die Dateien zu halten Wurzel der Build-Konfiguration Ordner, wenn Sie können.

Viel Glück,

Martin.

Andere Tipps

Wenn die Ziele nur dann ausgeführt werden soll, wenn TFS ist die Build und nicht auf dem lokalen Entwicklungsmaschinen ausgeführt wird, können Sie Ihre Ziele Datei im Ordner für den Build setzen sich und verweisen Sie mit:

<Import Project="$(MSBuildProjectDirectory)\my.team.build.targets.proj" />

Wenn Sie jedoch die Ziele ausgeführt werden soll für alle Versionen, können Sie es so einrichten, dass die einzelnen Projekte auf sie verweisen durch Zugabe von etwas wie:

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets" Condition="Exists('$(SolutionRoot)/libs/my.team.build/my.team.build.targets')" />

Auf meinem Projekt verwenden wir tatsächlich diese beiden, die erste uns die nächtliche anpassen können baut so können wir zusätzliche Schritte tun vor und nach der vollständigen Lösung läuft kompilieren, und die zweite ermöglicht es den Projekt-by-Projekt Anpassung.

Wenn Sie eine Überschreibung Zieldatei erstellen Sie es wie TeamBuildOverrides.targets etwas zu importieren und rufen und sie in demselben Ordner in der Quellcodeverwaltung, wo TFSBuild.proj für Ihren Build-Typen lebt, wird es zuerst gezogen werden und für den Import zur Verfügung steht in die Datei TFSBuild.proj. Standardmäßig wird die TFSBuild.proj-Datei in den Ordner TeamBuildTypes in Quellcodeverwaltung direkt unter dem Stammordner Ihres Projekts hinzugefügt.

Verwenden Sie die folgende Importanweisung in Ihrer Datei TFSBuild.proj:

<Import Project="$(MSBuildProjectDirectory)\TeamBuildOverrides.targets" />

Stellen Sie sicher, dass Sie keine doppelten Überschreibungen in Ihrer TFSBuild.proj Datei haben oder die importierten Überschreibungen nicht gefeuert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top