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:
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?
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:
website.publishproj
im Stammverzeichnis der WebsiteDer 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.
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.