wake-up-neo.net

Wie verwende ich die Befehlszeile msbuild, um das VS2012-Websiteprojekt ohne Vorkompilierung bereitzustellen?

Ich habe ein sehr großes VS2012-Websiteprojekt (keine Webanwendung) geerbt und versuche, dessen Bereitstellung zu automatisieren. Es gibt Unmengen von Zirkelverweisen im Projekt, damit es mit aspnet_compiler.exe vorkompiliert werden kann. Ich muss feste Namen aktivieren. Das Problem dabei ist, dass der Build auf meinem Quad-Core-, 16-GB-RAM- und SSD-Entwicklercomputer ungefähr 20 Minuten dauert. Der vorherige Entwickler musste sich damit nicht befassen, da er nur die gesamte Quelle auf den Produktions-Webserver kopieren würde.

Bevor ich mich also mit dem Problem der Zirkelverweise befasse, möchte ich das Projekt zumindest automatisch mit msdeploy bereitstellen. Ich kann die Veröffentlichungsprofile in Visual Studio verwenden und es macht genau das, was ich will:

  1. Erstellt die referenzierten DLLs und fügt sie dem Projekt hinzu.
  2. Wandelt sich die web.config um?.
  3. Versucht nicht einmal, die Website zu erstellen, sondern packt sie einfach in eine Zip-Datei für mich.

Was ich für mein Leben nicht herausfinden kann, ist, wie man MSBuild.exe dazu bringt, genau dasselbe zu tun!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy

Der obige Befehl versucht immer noch, aspnet_compiler auszuführen, was nicht das ist, was ich will. Das Veröffentlichungsprofil besagt, dass es nicht vorkompiliert werden sollte ... aber in den Protokollen sehe ich, dass es es ausführt.

Also: Wie kann ich mit msbuild ein Websiteprojekt bereitstellen, ohne es vorkompilieren zu müssen?

35
Paul Lemke

Für Website-Projekte wird der Veröffentlichungsprozess nicht in den Erstellungsprozess eingebunden. Für Website-Projekte, da es keinen formalen Erstellungsprozess gibt, gab es nichts, was wir wirklich erweitern könnten.

Hinweis: Für die folgenden Inhalte ist VS 2012 (oder VS2010) und darüber hinaus das Azure SDK erforderlich. Die Funktionen wurden nicht in die RTM Drop von VS2012 aufgenommen.

Nach dem Erstellen eines Veröffentlichungsprofils in VS wird Folgendes erstellt:

  1. Ein Veröffentlichungsprofil (.pubxml-Datei) unter App_Data/PublishProfiles
  2. EIN website.publishproj im Stammverzeichnis der Website

Der Zweck des website.publishproj soll das Veröffentlichen über die Befehlszeile erleichtern. Es ist eine Ausfüllung für die .csproj/.vbproj, den Sie normalerweise bei Verwendung eines Web-App-Projekts erhalten würden.

Wenn Sie die Veröffentlichung automatisieren möchten, können Sie einen Befehl wie den folgenden verwenden.

msbuild.exe website.publishproj /p:DeployOnBuild=true 
   /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0

Sie müssen nicht angeben, welche Ziele aufgerufen werden sollen.

Bezüglich der Meldung in VS, dass die Site vorkompiliert wird, handelt es sich um einen Fehler. Es wird eine Vorkompilierung durchlaufen, die Veröffentlichung verwendet jedoch die Einstellung im Profil. Dieser Fehler sollte in Visual Studio Update 1 behoben worden sein. Nach der Installation sollte der nicht benötigte Vorkompilierungsschritt nicht angezeigt werden. Bitte lassen Sie mich wissen, wenn Sie das immer noch sehen.

54

Während die Antwort von Sayed Ibrahim Hashimi mir etwas geholfen hat, stellte ich fest, dass Folgendes für VS2012 erforderlich ist:

Nach der Installation des Azure SDK habe ich ein Dateiveröffentlichungsprofil erstellt, das einen Ordner PublishProfiles im Ordner Properties meines Projekts erstellt hat. In diesem neuen Ordner befinden sich zwei XML-Dateien mit dem Namen my_sample_PublishProfile_Foo.pubxml und my_sample_PublishProfile_Foo.pubxml.user wurde erstellt.

Mit der .pubxml kann ich mit msbuild wie folgt veröffentlichen:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "C:\...\UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:\...\PublishProfiles\my_sample_PublishProfile_Foo.pubxml"  /p:VisualStudioVersion=11.0

Denken Sie daran, die Batch-Datei, die dieses Skript enthält, mit Administratorrechten auszuführen.

1
callisto