Visual Studio 2010 verfügt über einen Veröffentlichungsbefehl, mit dem Sie Ihr Webanwendungsprojekt an einem Dateisystemspeicherort veröffentlichen können. Ich möchte dies auf meinem TeamCity-Buildserver tun, daher muss ich dies mit dem Solution Runner oder msbuild tun. Ich habe versucht, das Veröffentlichungsziel zu verwenden, aber ich denke, das könnte für ClickOnce gelten:
msbuild Project.csproj /t:Publish /p:Configuration=Deploy
Grundsätzlich möchte ich genau das tun, was ein Web Deployment-Projekt tut, aber ohne das Add-In. Ich benötige es, um den WAP zu kompilieren, alle für die Ausführung nicht erforderlichen Dateien zu entfernen, alle web.config-Transformationen durchzuführen und die Ausgabe an einen bestimmten Speicherort zu kopieren.
Meine Lösung , basierend auf Jeff Sivers Antwort
<Target Name="Deploy">
<MSBuild Projects="$(SolutionFile)"
Properties="Configuration=$(Configuration);DeployOnBuild=true;DeployTarget=Package"
ContinueOnError="false" />
<Exec Command=""$(ProjectPath)\obj\$(Configuration)\Package\$(ProjectName).deploy.cmd" /y /m:$(DeployServer) -enableRule:DoNotDeleteRule"
ContinueOnError="false" />
</Target>
Antworten:
Ich habe es meistens ohne ein benutzerdefiniertes msbuild-Skript zum Laufen gebracht. Hier sind die relevanten Konfigurationseinstellungen für TeamCity-Builds:
Dadurch wird kompiliert, verpackt (mit web.config-Transformation) und die Ausgabe als Artefakt gespeichert. Das einzige, was fehlt, ist das Kopieren der Ausgabe an einen angegebenen Speicherort. Dies kann jedoch entweder in einer anderen TeamCity-Buildkonfiguration mit einer Artefaktabhängigkeit oder mit einem msbuild-Skript erfolgen.
Aktualisieren
Hier ist ein msbuild-Skript, das die Ausgabe kompiliert, verpackt (mit web.config-Transformation) und auf meinen Staging-Server kopiert
Sie können auch die Eigenschaften SolutionName und ProjectName aus dem PropertyGroup-Tag entfernen und an msbuild übergeben.
Update 2
Da diese Frage immer noch viel Verkehr hat, hielt ich es für sinnvoll, meine Antwort mit meinem aktuellen Skript zu aktualisieren, das Web Deploy (auch als MSDeploy bezeichnet) verwendet.
In Teamcity, habe ich Parameter genannt
env.Configuration
,env.ProjectName
undenv.DeployServiceUrl
. Der MSBuild-Runner verfügt über den Build-Dateipfad und die Parameter werden automatisch übergeben (Sie müssen sie nicht in den Befehlszeilenparametern angeben).Sie können es auch über die Befehlszeile ausführen:
quelle
Package
Ziel auch von WebDeploy abhängt:error : Package/Publish task Microsoft.Web.Publishing.Tasks.IsCleanMSDeployPackageNeeded failed to load Web Deploy assemblies. Microsoft Web Deploy is not correctly installed on this machine.
(Erwähnen Sie es, da Sie schreiben, dass Ihr zweites Update WebDeploy verwendet, was bedeuten könnte, dass das erste WebDeploy noch nicht verwendet.)Mit den in VS 2012 eingeführten Bereitstellungsprofilen können Sie mit der folgenden Befehlszeile veröffentlichen:
Weitere Informationen zu den Parametern finden Sie hier .
Die Werte für den
/p:VisualStudioVersion
Parameter hängen von Ihrer Version von Visual Studio ab. Wikipedia hat eine Tabelle mit Visual Studio-Versionen und deren Versionen .quelle
/p:VisualStudioVersion=?
für VS 2017?msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1
...... Aber immer noch nur DLLs nicht alle Dateien wie im Publish-Ordner: (`/p:VisualStudioVersion=15
. Ich bin nicht sicher, ob dies mit Ihrem Problem beim Kopieren von Dateien zusammenhängt.Ich habe eine solche Lösung gefunden, die für mich großartig funktioniert:
Die geheime Sauce ist _WPPCopyWebApplication Ziel.
quelle
error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project
. Das Herausnehmen dieses Teils führte zu einer Bereitstellung ohne Bereitstellung von AnsichtenMSBuild.exe C:\BuildAgent\work\4c7b8ac8bc7d723e\WebService.sln /p:Configuration=Release /p:OutputPath=bin /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=https://204.158.674.5/msdeploy.axd /p:username=Admin /p:password=Password#321 /p:AllowUntrustedCertificate=True /p:DeployIisAppPath=Default WebSite/New /p:MSDeployPublishMethod=WMSVC
. Es gibt mir einen FehlerMSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New
. Gibt es dafür eine Lösung?Ich kenne TeamCity nicht und hoffe, dass dies für Sie funktionieren kann.
Der beste Weg, dies zu tun, ist mit MSDeploy.exe. Dies ist Teil des von Microsoft ausgeführten WebDeploy-Projekts. Sie können die Bits hier herunterladen .
Mit WebDeploy führen Sie die Befehlszeile aus
Dies entspricht dem Befehl VS Publish und kopiert nur die erforderlichen Bits in den Bereitstellungsordner.
quelle
Mit VisualStudio 2012 gibt es eine Möglichkeit, Subj ohne Veröffentlichungsprofile zu behandeln. Sie können den Ausgabeordner mithilfe von Parametern übergeben. Es funktioniert sowohl mit dem absoluten als auch mit dem relativen Pfad im Parameter 'PublishUrl'. Sie können VS100COMNTOOLS verwenden, müssen jedoch VisualStudioVersion überschreiben, um das Ziel 'WebPublish' von zu verwenden
%ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets
. Mit VisualStudioVersion 10.0 ist dieses Skript ohne Ausgabe erfolgreich :)Update: Ich habe es geschafft, diese Methode auf einem Build-Server zu verwenden, auf dem nur Windows SDK 7.1 installiert ist (kein Visual Studio 2010 und 2012 auf einem Computer). Aber ich musste diese Schritte befolgen, damit es funktioniert:
Skript:
quelle
fanden zwei verschiedene Lösungen, die auf etwas unterschiedliche Weise funktionierten:
1. Diese Lösung ist inspiriert von der Antwort von alexanderb [Link] . Leider hat es bei uns nicht funktioniert - einige DLLs wurden nicht in das OutDir kopiert. Wir haben herausgefunden, dass das Ersetzen
Nachteil dieser Lösung war die Tatsache, dass OutDir nicht nur Dateien zum Veröffentlichen enthielt.ResolveReferences
durchBuild
Ziel das Problem löst - jetzt werden alle erforderlichen Dateien in den OutDir-Speicherort kopiert.2. Die erste Lösung funktioniert gut, aber nicht wie erwartet. Wir wollten die Veröffentlichungsfunktion wie in Visual Studio IDE haben - dh nur die Dateien, die veröffentlicht werden sollen, werden in das Ausgabeverzeichnis kopiert. Wie bereits erwähnt, kopiert die erste Lösung viel mehr Dateien in das OutDir - die Website zur Veröffentlichung wird dann in gespeichert
_PublishedWebsites/{ProjectName}
Unterordner . Der folgende Befehl löst dieses Problem: Nur die zu veröffentlichenden Dateien werden in den gewünschten Ordner kopiert. Jetzt haben Sie also ein Verzeichnis, das direkt veröffentlicht werden kann - im Vergleich zur ersten Lösung sparen Sie Platz auf der Festplatte.AutoParameterizationWebConfigConnectionStrings=false
Der Parameter garantiert, dass Verbindungszeichenfolgen nicht als spezielle Artefakte behandelt und korrekt generiert werden. Weitere Informationen finden Sie unter Link .quelle
Sie müssen Ihre Umgebungen einstellen
und verweise auf meinen Blog (sorry Beitrag war Koreanisch)
http://blog.naver.com/PostSearchList.nhn?SearchText=webdeploy&blogId=xyz37&x=25&y=7
quelle
Dies ist meine Batch-Datei
quelle
Das ist meine Arbeitscharge
publish-my-website.bat
Beachten Sie, dass ich Visual Studio auf dem Server installiert habe, damit es ausgeführt werden kann,
MsBuild.exe
da dieMsBuild.exe
Ordner in .Net Framework nicht funktionieren.quelle
msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1
...... Aber immer noch nur DLLs bekommen, nicht die Dateistruktur, die ich will. Was stimmt damit nicht? :(Sie können die Lösung mit dem gewünschten Pfad über den folgenden Code veröffentlichen. Hier ist PublishInDFolder der Name, der den Pfad enthält, in dem wir veröffentlichen müssen (wir müssen diesen im folgenden Bild erstellen).
Sie können eine Veröffentlichungsdatei wie folgt erstellen
Fügen Sie unten 2 Codezeilen in die Batch-Datei (.bat) ein.
quelle
Geben Sie zum Generieren der Veröffentlichungsausgabe einen weiteren Parameter an. msbuild example.sln / p: Publishprofile = Profilname / p: deployonbuild = true / p: configuration = debug / oder ein beliebiges
quelle