2010-12-22 5 views
6

I Automatische leite Baut mit TFS 2010 In einer Lösung, die ich mehr als eine Web-Anwendungen haben, die sich alle unter dem gleichen Stammverzeichnis werden - zB:Wie kann MSBuild angewiesen werden, viele Webprojekte in einem Verzeichnis zu veröffentlichen?

RootDir ->

WebApplicationProject1.csproj 
    WebApplicationProject2.csproj 
    ... 

Wenn ich laufen automatisiertes Build, habe ich die folgenden Argumente für MSBuild:

/p: DeployOnBuild = true; DeployTarget = PipelinePreDeployCopyAllFilesToOneFolder; _PackageTempDir = "\ Computer \ Builds \ Veröffentlicht"/p: SkipExtraFilesOnServer = true

MSBuild behält jedoch vorhandenen Inhalt in diesem Ordner nicht bei und mit jedem Projekt wird der Inhalt in diesem Ordner gelöscht. Das letzte Projekt, das gebaut wird, ist der Gewinner.

Kann ich MSBuild veranlassen, den Inhalt in diesem Ordner nicht zu löschen und nur vorhandene Dateien zu ersetzen?

Vielen Dank für weitere Informationen zu diesem Thema.

Antwort

0

Sie könnten sie alle erstellen, um Ordner zu trennen und dann alle Ergebnisse in den endgültigen Ordner zu kopieren. Wenn Dateien die gleichen Namen haben, wäre es wahrscheinlich verpatzt, aber es wäre so, wenn Sie sie alle sowieso in einem einzigen Ordner erstellen könnten.

+0

Danke für die Antwort. Aber das will ich nicht. Dies bedeutet, dass separate Builds in TFS vorhanden sind. Ich möchte eine Build-Konfiguration, um mehrere Web-Projekte zu erstellen, die gleichzeitig in demselben Verzeichnis existieren. Wenn sie veröffentlicht werden, möchte ich, dass sie auch in einem Verzeichnis veröffentlicht werden. –

+0

Sie können ein Batch-Skript oder etwas schreiben, das alle separaten Builds ausführt und dann kopiert. – zsalzbank

1

Sie müssen nicht mehrere Build-Konfigurationen erstellen. Definieren Sie einfach eine Lösung, die beide Projekte enthält, erstellen Sie eine Builddefinition für diese Lösung, und fügen Sie ein AfterDropBuild-Ziel hinzu, das alle Ausgabedateien von PublishedWebservices in einen gemeinsamen Ordner kopiert.

0

Das scheint genau so zu sein, wie Microsoft es will. Das Gleiche habe ich in VS2008 gefunden. Durch das Erstellen des Projekts wird der gesamte Ordner einschließlich .svn gelöscht.

Meine Lösung besteht darin, ein Post-Build-Ereignis zu erstellen, um die Dateien von jedem Ort in einen gemeinsamen Ordner zu kopieren. Es ist nicht ideal, aber es funktioniert ohne größere Abhängigkeiten, die ich gefunden habe.

1

Sie benötigen MSBuild über Ihre mehrere Ziele sagen

Versuchen

<Target Name="Build" DependsOnTargets="T1, T2"> 
</Target> 

MSBuild Sie eine Standard-Ziel definieren können und ermöglicht es Ihnen, Abhängigkeiten zwischen Ihrer Ziele zu definieren. Wenn kein Standard definiert ist, wird der erste gefunden, der gefunden wird. Unter Verwendung von DefaultTargets können Sie mehrere aufrufen:

<Project DefaultTargets="T1;T2"> 

Ein Ziel sollte alle gut definierten Schritt erreichen. Ein Clean-Ziel würde beispielsweise alle erforderlichen Dateien und Ordner entfernen, die zum Bereinigen des Projekts erforderlich sind. Kompilieren würde alle DLLs usw. kompilieren

Ihre Ziele sollten in der Regel ihre eigenen Abhängigkeiten deklarieren:

<Target Name="CI" DependsOnTargets="T1, T2"> 
</Target> 

Andernfalls wird Ihr Ziel, alle einzelnen Schritte enthalten soll, die Sie ausführen möchten:

<Target Name="XX"> 
    <CallTarget Targets="T1"/> 
    <CallTarget Targets="T2"/> 
</Target> 

wenn Sie noch Verwirrung Gesicht Besuche dies link

+0

Hallo @Anna, danke für die Antwort. Ich habe nicht ganz verstanden, was zu tun ist. Die Verbindung hat auch nicht geholfen. Kannst du bitte mehr erklären? –