Warum kopiert MSBuild nicht wie erwartet?

7

Ich muss meinen Build schreiben. Ich verwende MSBUILD wegen seiner Integration mit VS.net. Ich versuche, einige Dateien aus der Build-Umgebung in den Bereitstellungsordner zu kopieren. Ich verwende die Kopieraufgabe von MSBuild. Aber anstatt den Verzeichnisbaum so zu kopieren, wie ich es erwarten würde. Es kopiert alle Inhalte in einen einzigen Ordner. Ich wiederhole alle Dateien aus der Verzeichnisbaumstruktur in einem Ordner. Ich brauche es, um den Baum der Ordner und Verzeichnisse in den Zielordner zu kopieren. Gibt es etwas, das mir fehlt?

Hier sind die relevanten Teile meines Build-Skripts:

%Vor%     
minty 05.11.2008, 22:49
quelle

4 Antworten

13

Nur ein Juwel, das wir beim Debuggen von MSBuild-Problemen beim Kopieren gefunden haben:

Ссылка

ItemGroups werden vor Targets geparst, daher werden alle Targets, die neue Dateien erstellen (z. B. Kompilierungen!), nicht aufgenommen, wenn auf eine ItemGroup weiter im Script verwiesen wird.

Eric Bowen beschreibt auch eine Problemumgehung für dieses "Feature", die Aufgabe CreateItem :

%Vor%

Viele Grüße an ihn!

    
Jarrod Dixon 12.01.2009 07:53
quelle
12

Wenn Sie den Zielordner für den Kopiervorgang angeben, werden alle Elemente aus der SourceFiles-Auflistung übernommen und in den Zielordner kopiert. Dies wird erwartet, da die Kopieraufgabe keine Möglichkeit hat, herauszufinden, welcher Teil des Pfades jedes Elements durch den DestinationFolder ersetzt werden muss, um die Baumstruktur beizubehalten. Zum Beispiel, wenn Ihre SourceDir-Sammlung wie folgt definiert ist:

%Vor%

Wie würden Sie die Zielordner-Struktur sehen?

Um die Struktur beizubehalten, müssen Sie eine Identitätstransformation durchführen und für jedes Element in der SourceFiles-Auflistung ein Zielelement generieren. Hier ist ein Beispiel:

%Vor%

Die Kopieraufgabe übernimmt jedes Element in der SourceFiles-Auflistung und transformiert ihren Pfad, indem der Teil vor der ** in der Quellenelementspezifikation durch $ (DropPath) ersetzt wird.

Man könnte argumentieren, dass die DestinationFolder-Eigenschaft als eine Verknüpfung zu der folgenden Umwandlung geschrieben sein sollte:

%Vor%

Leider würde dies das tiefe Kopieren in ein flaches Ordner-Szenario verhindern, das Sie vermeiden möchten, aber andere Leute könnten das in ihrem Build-Prozess verwenden.

    
Franci Penov 05.11.2008 23:15
quelle
5

Sehr einfaches Beispiel, das den Verzeichnisinhalt und die Struktur rekursiv kopiert:

%Vor%

@ (Kompilieren) ist eine Elementgruppe aller Dateien, die Sie kopieren möchten. Könnte etwas wie:

sein %Vor%

Der Kopiervorgang kopiert alle Dateien wie xcopy nach c: \ foocopy.

    
Adam 08.11.2008 17:36
quelle
4

Ich habe das Beispiel in einem der Beispiele in MSDN gefunden, das ich nicht verstehe Aber ich werde ein Beispiel für meine Mitstreiter hier im Stackoverflow hinterlassen. Hier ist die feste Version des Migrationsziels von oben:

%Vor%

Wenn jemand dieses Beispiel wirklich versteht, erklären Sie es bitte. Viel Glück!

    
minty 05.11.2008 23:07
quelle

Tags und Links