2009-12-31 14 views
41

Ich versuche, meine Webanwendung automatisch zu veröffentlichen, wenn ein Release-Build ausgeführt wird. Ich mache das mit dem _CopyWebApplication-Ziel. Ich fügte meiner .csproj-Datei Folgendes hinzu:_CopyWebApplication mit web.config Transformationen

Das funktioniert aber mit einem Problem. Der Unterschied zwischen dieser Ausgabe und der beim Verwenden des Menüelements Veröffentlichen in Visual Studio generierten Ausgabe besteht darin, dass die Web.Release.config-Umwandlung nicht auf die Datei Web.config angewendet wird, wenn die MSBuild-Methode verwendet wird. Stattdessen werden Web.config, Web.Release.config und Web.Debug.config alle kopiert.

Irgendwelche Ideen werden geschätzt.

Antwort

71

Ich habe dafür meinen Kopf gegen die Wand geschlagen. Nachdem ich durch die MSBuild-Ziele gewandert bin, bin ich auf etwas sehr "Opakes" gestoßen.

Lange Rede, kurzer Sinn: Versuchen Sie es mit dem neuen _WPPCopyWebApplication. Es funktioniert auf meiner Maschine. Das alte _CopyWebApplication unterstützt keine Transformationen aus Legacy-Gründen. Das ist, was ich tue:

msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj 

# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false 

Lange Geschichte:

Werfen Sie einen Blick auf VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets. Es ist so falsch. Finden _CopyWebApplication in Zeile 70. Der Kommentar ist:

Die ursprüngliche _CopyWebApplication ist jetzt ein Legacy, können Sie es immer noch verwenden, indem $ (UseWPP_CopyWebApplication) zu wahr. Standardmäßig wird jetzt das Ziel _WPPCopyWebApplication in Microsoft.Web.Publish.targets verwendet. Es ermöglicht die Nutzung der web.config trsnformation. [alle sic]

Uh oh. UseWPP_CopyWebApplication ist standardmäßig auf false gesetzt (Zeile 27), was sinnvoll ist, wenn Sie das vorhandene _CopyWebApplication nicht brechen wollen. Wenn Sie es auf "true" setzen, wird das neue WPP-Material verwendet, das in VS 2010 eingeführt wurde. Ich ziehe es vor, ein "verstecktes" Ziel zu nennen.

+4

WTF Microsoft? Danke für das Teilen dieses Jabe ... – jjxtra

+0

Ich frage mich, ob es eine Möglichkeit gibt, das Kopieren von Bibliotheken, die über ein anderes Projekt referenziert wurden, zu korrigieren, damit es in msbuild output dir eingebunden wird? –

+0

Ich habe versucht, dies mit WebDeploy zu tun, benutze/p: WebPublishMethod = FileSystem und benutze die pubxml-Dateien. Ich konnte es nicht zur Arbeit bringen. Diese Lösung ist der beste Weg, den ich gefunden habe. Ein Ratschlag: Ich konnte es ohne die OutDir-Eigenschaft nicht zum Laufen bringen. Sie müssen es in die Befehlszeile aufnehmen, auch wenn es in den Eigenschaften Ihres Projekts bereits definiert ist. –

Verwandte Themen