Skip to content

Verwendung von msbuild zur Ausführung eines Dateisystemveröffentlichungsprofils

Wir würden uns über Ihre Unterstützung beim Teilen unserer Informatik-Rezensionen freuen.

Lösung:

FYI: Ich hatte das gleiche Problem mit Visual Studio 2015. Nach vielen Stunden des Ausprobierens, kann ich jetzt msbuild myproject.csproj /p:DeployOnBuild=true /p:PublishProfile=myprofile.

Ich musste meine .csproj-Datei bearbeiten, damit es funktioniert. Sie enthielt eine Zeile wie diese:


Ich habe diese Zeile wie folgt geändert:


(Ich änderte 10.0 in 14.0, ich bin nicht sicher, ob das notwendig war. Aber ich musste auf jeden Fall den Bedingungsteil entfernen.)

Ich habe die Antwort hier gefunden:
http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Visual Studio 2010 verfügt über großartige neue Funktionen zur Veröffentlichung von Webanwendungsprojekten.
Funktionen, die es Ihnen ermöglichen, Ihr Webanwendungsprojekt einfach mit einem
Klick auf eine Schaltfläche. Hinter den Kulissen werden die Web.config-Transformation und
Paketbildung durch ein umfangreiches MSBuild-Skript, das in die Projektdatei importiert wird
in Ihre Projektdatei importiert wird (zu finden unter: C:Programmdateien
(x86)MSBuildMicrosoftVisualStudiov10.0WebMicrosoft.Web.Publishing.targets).
Leider ist das Skript sehr kompliziert, unübersichtlich und
undokumentiert (abgesehen von einigen oft schlecht geschriebenen und meist nutzlosen
Kommentare in der Datei). Ein großes Flussdiagramm dieser Datei und eine
Dokumentation darüber, wie man sich in die Datei einklinkt, wäre schön, aber es scheint
leider zu fehlen (oder ich kann sie zumindest nicht finden).

Leider bedeutet dies, dass die Veröffentlichung über die Kommandozeile
viel undurchsichtiger ist, als es sein müsste. Ich war überrascht über das Fehlen
Dokumentation in diesem Bereich, da heutzutage viele Unternehmen einen
Continuous-Integration-Server und einige sogar eine automatische Bereitstellung
(wobei die Veröffentlichungsfunktionen von VS2010 eine große Hilfe sein könnten), so dass ich
hätte ich gedacht, dass die (einfache!) Aktivierung dieser Funktion eine
Hauptanforderung für die Funktion gewesen wäre.

Wie auch immer, nachdem ich mich stundenlang durch die Microsoft.Web.Publishing.targets
Datei stundenlang gewühlt und meinen Kopf gegen die Trial-and-Error-Wand geschlagen habe,
ist es mir gelungen, herauszufinden, wie Visual Studio anscheinend seine
magischen Ein-Klick-Funktionen "Publish to File System" und "Build Deployment
Paket" Funktionen. Ich werde mich ein wenig mit MSBuild-Skripting beschäftigen, also
Wenn Sie mit MSBuild nicht vertraut sind, empfehle ich Ihnen einen Blick auf diese Crash
Kurs auf der MSDN-Seite.

Veröffentlichen im Dateisystem

Der VS2010-Dialog "Im Dateisystem veröffentlichen" Das Veröffentlichen im Dateisystem hat mich
Ich habe eine Weile gebraucht, um das zu verstehen, weil ich eine sinnvolle Verwendung von MSBuild
erwartet hatte. Stattdessen tut VS2010 etwas ziemlich Seltsames: Es ruft
MSBuild auf, um eine Art halbes Deployment durchzuführen, das die Dateien der Web
App-Dateien im obj-Ordner Ihres Projekts vorbereitet, dann scheint es eine manuelle
Kopie dieser Dateien (dh außerhalb von MSBuild) in Ihr Ziel veröffentlichen
Ordner. Dies ist wirklich whack Verhalten, weil MSBuild ist entworfen, um
Dateien zu kopieren (und andere Build-bezogene Dinge), also würde es Sinn machen
wenn der ganze Prozess nur ein MSBuild-Ziel wäre, das VS2010 aufruft
aufruft, und nicht ein Ziel und dann eine manuelle Kopie.

Das bedeutet, dass es nicht so einfach ist, dies über MSBuild auf der Kommandozeile zu tun
Projektdatei mit einem bestimmten Ziel aufzurufen und
einige Eigenschaften zu setzen. Sie müssen tun, was VS2010 eigentlich hätte tun sollen
sollte: Sie müssen selbst ein Ziel erstellen, das das halbe Deployment durchführt und
die Ergebnisse in den Zielordner kopiert. Um Ihre Projektdatei zu bearbeiten,
klicken Sie mit der rechten Maustaste auf das Projekt in VS2010 und klicken Sie auf Projekt entladen, dann
klicken Sie erneut mit der rechten Maustaste und dann auf Bearbeiten. Scrollen Sie nach unten, bis Sie das
Import-Element, das die Webanwendungsziele importiert
(Microsoft.WebApplication.targets; diese Datei selbst importiert die
Microsoft.Web.Publishing.targets-Datei, die bereits erwähnt wurde). Unterhalb von
dieser Zeile fügen wir unser neues Ziel mit dem Namen PublishToFileSystem hinzu:


    
    

    
        
    

    

Dieses Ziel hängt von der Datei
PipelinePreDeployCopyAllFilesToOneFolder-Ziel ab, das VS2010
aufruft, bevor es die manuelle Kopie durchführt. Ein wenig Herumstöbern in
Microsoft.Web.Publishing.targets zeigt, dass der Aufruf dieses Ziels dazu führt
die Projektdateien in dem Verzeichnis abgelegt werden, das durch die
Eigenschaft _PackageTempDir.

Die erste Aufgabe, die wir in unserem Ziel aufrufen, ist die Aufgabe Error, auf die
wir eine Bedingung gesetzt haben, die sicherstellt, dass die Aufgabe nur ausgeführt wird, wenn
die Eigenschaft PublishDestination nicht gesetzt wurde. Dies wird Sie abfangen
und führt zu einem Fehler bei der Erstellung, falls Sie vergessen haben, die
PublishDestination-Eigenschaft anzugeben. Wir rufen dann die Aufgabe MakeDir auf, um
das PublishDestination-Verzeichnis zu erstellen, falls es noch nicht existiert.

Anschließend definieren wir ein Element namens PublishFiles, das alle
Dateien, die sich im Ordner _PackageTempDir befinden. Anschließend wird die Aufgabe Copy
aufgerufen, die alle diese Dateien in den Zielordner Publish kopiert.
Das Attribut DestinationFiles des Elements Copy ist ein wenig komplex;
Es führt eine Transformation der Elemente durch und konvertiert ihre Pfade in neue
Pfade, die im PublishDestination-Ordner verankert sind (siehe Well-Known
Item Metadata, um zu sehen, was diese %()s bedeuten).

Um dieses Ziel von der Befehlszeile aus aufzurufen, können wir nun einfach Folgendes ausführen
diesen Befehl ausführen (natürlich unter Änderung des Projektdateinamens und der Eigenschaften
entsprechend anpassen):

msbuild Website.csproj "/p:Platform=AnyCPU;Configuration=Release;PublishDestination=F:TempPublish" /t:PublishToFileSystem

Ich hatte immer noch Probleme, nachdem ich alle oben genannten Antworten ausprobiert hatte (ich verwende Visual Studio 2013). Es wurde nichts in den Veröffentlichungsordner kopiert.

Der Haken an der Sache war, dass ich, wenn ich MSBuild mit einem einzelnen Projekt statt einer Lösung ausführe, einen zusätzlichen Parameter angeben muss, der die Visual Studio Version angibt:

/p:VisualStudioVersion=12.0

12.0 ist für VS2013, ersetzen Sie ihn durch die von Ihnen verwendete Version. Nachdem ich diesen Parameter hinzugefügt hatte, funktionierte es einfach.

Die vollständige Befehlszeile sieht wie folgt aus:

MSBuild C:PathToMyProjectMyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0

Ich habe sie hier gefunden:

http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment

Dort heißt es:

Wenn Sie ein einzelnes Projekt statt einer Lösung angeben, müssen Sie einen Parameter hinzufügen, der die Visual Studio-Version angibt.

Hier sehen Sie die Kommentare und Bewertungen der Leser

Denken Sie daran, dass Sie die Fähigkeit haben, diese Chronik zu schätzen.



Nutzen Sie unsere Suchmaschine

Suche
Generic filters

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.