Wie veröffentliche ich Web mit msbuild?

216

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="&quot;$(ProjectPath)\obj\$(Configuration)\Package\$(ProjectName).deploy.cmd&quot; /y /m:$(DeployServer) -enableRule:DoNotDeleteRule" 
          ContinueOnError="false" />
</Target>
jrummell
quelle
Mögliches Duplikat: stackoverflow.com/questions/1162253/…
Steven Evers
@SnOrfus Ich verwende derzeit Webbereitstellungsprojekte in VS 2008 (wie in meiner Antwort auf diese Frage erwähnt), möchte jedoch stattdessen versuchen, die Veröffentlichungsfunktion von VS 2010 zu automatisieren.
Jrummell
Diese Frage sieht hilfreich aus stackoverflow.com/questions/1983575/…
jrummell
2
Nur eine kleine Änderung an Ihrem Skript: Sie verwenden $ (ProjectPath) für das Bereitstellungsskript, aber Sie möchten wirklich $ (ProjectDir), andernfalls erhalten Sie .csproj \ obj
Troy Hunt
2
Ab VS2012 ist dies viel einfacher: stackoverflow.com/a/13947667/270348
RobSiklos

Antworten:

137

Ich habe es meistens ohne ein benutzerdefiniertes msbuild-Skript zum Laufen gebracht. Hier sind die relevanten Konfigurationseinstellungen für TeamCity-Builds:

Artefaktpfade:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp 
Runner-Typ: MSBuild (Runner für MSBuild-Dateien) 
Dateipfad erstellen: MyProject \ MyProject.csproj 
Arbeitsverzeichnis: wie Checkout-Verzeichnis 
MSBuild-Version: Microsoft .NET Framework 4.0 
MSBuild ToolsVersion: 4.0 
Plattform ausführen: x86 
Ziele: Paket 
Befehlszeilenparameter für MSBuild.exe: / p: Configuration = Debug

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

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
        <SolutionName>MySolution</SolutionName>
        <SolutionFile>$(SolutionName).sln</SolutionFile>
        <ProjectName>MyProject</ProjectName>
        <ProjectFile>$(ProjectName)\$(ProjectName).csproj</ProjectFile>
    </PropertyGroup>

    <Target Name="Build" DependsOnTargets="BuildPackage;CopyOutput" />

    <Target Name="BuildPackage">
        <MSBuild Projects="$(SolutionFile)" ContinueOnError="false" Targets="Rebuild" Properties="Configuration=$(Configuration)" />
        <MSBuild Projects="$(ProjectFile)" ContinueOnError="false" Targets="Package" Properties="Configuration=$(Configuration)" />
    </Target>

    <Target Name="CopyOutput">
        <ItemGroup>
            <PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/>
        </ItemGroup>
        <Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\build02\wwwroot\$(ProjectName)\$(Configuration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
    </Target>
</Project>

Sie können auch die Eigenschaften SolutionName und ProjectName aus dem PropertyGroup-Tag entfernen und an msbuild übergeben.

msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject

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.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
    <ProjectFile Condition=" '$(ProjectFile)' == '' ">$(ProjectName)\$(ProjectName).csproj</ProjectFile>
    <DeployServiceUrl Condition=" '$(DeployServiceUrl)' == '' ">http://staging-server/MSDeployAgentService</DeployServiceUrl>
  </PropertyGroup>

  <Target Name="VerifyProperties">
    <!-- Verify that we have values for all required properties -->
    <Error Condition=" '$(ProjectName)' == '' " Text="ProjectName is required." />
  </Target>

  <Target Name="Build" DependsOnTargets="VerifyProperties">
    <!-- Deploy using windows authentication -->
    <MSBuild Projects="$(ProjectFile)"
             Properties="Configuration=$(Configuration);
                             MvcBuildViews=False;
                             DeployOnBuild=true;
                             DeployTarget=MSDeployPublish;
                             CreatePackageOnPublish=True;
                             AllowUntrustedCertificate=True;
                             MSDeployPublishMethod=RemoteAgent;
                             MsDeployServiceUrl=$(DeployServiceUrl);
                             SkipExtraFilesOnServer=True;
                             UserName=;
                             Password=;"
             ContinueOnError="false" />
  </Target>
</Project>

In Teamcity, habe ich Parameter genannt env.Configuration, env.ProjectNameund env.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:

msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService
jrummell
quelle
2
danke - das funktioniert auch gut direkt von Powershell (Entschuldigung für die Formatierung - keine Wagenrückgabe in Kommentaren): & msbuild "$ solution" / p: "Configuration = $ configuration"; & msbuild "$ project" / t: Package / p: "Konfiguration = $ configuration; _PackageTempDir = $ outputfolder"
zcrar70
Ich habe das Beispiel aus Ihrem ersten Update ausprobiert und es scheint, dass das PackageZiel 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.)
chiccodoro
@jrummell: Ich möchte mein Visual Studio-Webprojekt von TeamCity auf einem Remote-Windows-Server bereitstellen. Was soll ich machen. Ich bin ein Anfänger und habe keine Ahnung, was zu tun ist
Nevin Raj Victor
1
Ich kann dies in TeamCity mit Webanwendungsprojekten zum Laufen bringen, aber ich habe auch ein altes gebundenes Website-PROJEKT, das ich ebenfalls veröffentlichen muss (als Paket) und dann MSDeploy verwenden muss. Wenn ich in VS2013 veröffentliche, erhalte ich ein Bereitstellungspaket, aber MSBuild aus der cmd-Zeile erstellt kein Paket. Irgendwelche Gedanken?
KnowHowSolutions
1
Ich sehe hier keine Erwähnung des Veröffentlichungsprofils. Das Veröffentlichungsprofil sollte angegeben werden, damit die richtige web.config-Transformation angewendet wird. Update: Nevermind ... diese Funktion wurde 2 Jahre nach diesem Beitrag eingeführt. Dieser funktioniert wahrscheinlich immer noch. Ein späterer Beitrag in diesem Thread zeigt, wie mit einem Veröffentlichungsprofil über die Befehlszeile veröffentlicht wird.
Triynko
84

Mit den in VS 2012 eingeführten Bereitstellungsprofilen können Sie mit der folgenden Befehlszeile veröffentlichen:

msbuild MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=<profile-name> /p:Password=<insert-password> /p:VisualStudioVersion=11.0

Weitere Informationen zu den Parametern finden Sie hier .

Die Werte für den /p:VisualStudioVersionParameter hängen von Ihrer Version von Visual Studio ab. Wikipedia hat eine Tabelle mit Visual Studio-Versionen und deren Versionen .

Chris
quelle
6
Bei Verwendung von VS2012 .NET 3.5 funktionierte dies nicht für die Bereitstellung im Dateisystem. Es wird einfach erstellt und nicht bereitgestellt.
Jay Sullivan
2
Ihr /p:VisualStudioVersion=11.0 hat mir das Leben gerettet. Ich benutze /p:VisualStudioVersion=12.0 für vs2013 und es funktioniert gut.
Seyed Morteza Mousavi
Was ist der Wert /p:VisualStudioVersion=?für VS 2017?
Nishant
Erstelltes Build-Skript 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: (`
Nishant
@Nishant Verwenden Sie für VS 2017 /p:VisualStudioVersion=15. Ich bin nicht sicher, ob dies mit Ihrem Problem beim Kopieren von Dateien zusammenhängt.
Chris
38

Ich habe eine solche Lösung gefunden, die für mich großartig funktioniert:

msbuild /t:ResolveReferences;_WPPCopyWebApplication /p:BuildingProject=true;OutDir=C:\Temp\build\ Test.csproj

Die geheime Sauce ist _WPPCopyWebApplication Ziel.

Alexander Beletsky
quelle
1
Was ist _WPPCopyWebApplication und wie kann ich es verwenden? MSBbuild XML-Konfigurationsdatei /
Johnny_D
4
Bei Verwendung von VS2012 .NET 3.5 wurde der Fehler angezeigt error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project. Das Herausnehmen dieses Teils führte zu einer Bereitstellung ohne Bereitstellung von Ansichten
Jay Sullivan
Möglicherweise müssen Sie es mit einem anderen /p:VisualStudioVersion=12.0 aufrufen, da der Build die Ziele aus c: \ Programme (x86) \ msbuild \ microsoft \ visualstudio \ VERSION \ Webapplication \ Microsoft.WebApplication.targets verwendet ältere Version, die nicht das richtige Ziel hat.
Jim Wolff
@FRoZeN Ich habe versucht, MSBuild als zu verwenden MSBuild.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 Fehler MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Gibt es dafür eine Lösung?
Nevin Raj Victor
1
@NevinRajVictor Dieser Fehler ist wahrscheinlich, weil Sie einen Leerzeichen im DeployIisAppPath-Wert haben. Sie müssen den Wert in Anführungszeichen setzen. zB / p: DeployIisAppPath = "Standardwebsite / Neu"
Shiitake
27

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

msdeploy.exe -verb:sync -source:contentPath=c:\webApp -dest:contentPath=c:\DeployedWebApp

Dies entspricht dem Befehl VS Publish und kopiert nur die erforderlichen Bits in den Bereitstellungsordner.

Jeff Siver
quelle
Das sieht vielversprechend aus. Es sieht jedoch so aus, als ob der Verwaltungsdienst nur auf Server 2008 verfügbar ist. Auf meinem Staging-Server (auf dem ich die Bereitstellung automatisieren möchte) wird Windows 7 Pro ausgeführt.
Jrummell
2
Das Produkt besteht aus zwei Teilen. Für die Teile, die direkt in IIS integriert werden, ist Server 2008 erforderlich. Für die Befehlszeilenkomponente ist diese Anforderung nicht erforderlich. Ich habe es auf einer Server 2003-Box ausgeführt, die ich für Bereitstellungen verwende.
Jeff Siver
Ich habe etwas über MSDeploy gelesen. Ich habe es installiert und arbeite auf meinem Staging-Server, danke! Kann ich MSDeploy über ein MSBuild-Skript ausführen?
Jrummell
1
funktioniert dasselbe wie welche Konfiguration des VS Publish-Befehls? Welche Veröffentlichungsmethode - Dateisystem oder anderes? Verwendet es die Datei MyProject.Publish.xml, um zu bestimmen, welche Dateien kopiert werden sollen?
Anthony
1
Ich habe es gerade ausprobiert, aber es war nicht dasselbe wie bei VS Publish. Dies geschah genauso wie bei XCopy, einschließlich aller Quelldateien.
Louis Somers
13

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:

  1. Stellen Sie Windows SDK 7.1 mithilfe der Simmo-Antwort auf einem Computer auf den neuesten Stand ( https://stackoverflow.com/a/2907056/2164198 ).
  2. Setzen Sie den Registrierungsschlüssel HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ SxS \ VS7 \ 10.0 auf "C: \ Programme \ Microsoft Visual Studio 10.0 \" (verwenden Sie den entsprechenden Pfad).
  3. Kopieren des Ordners% ProgramFiles% \ MSBuild \ Microsoft \ VisualStudio \ v11.0 von meinem Entwicklercomputer zum Erstellen des Servers

Skript:

set WORK_DIR=%~dp0
pushd %WORK_DIR%
set OUTPUTS=%WORK_DIR%..\Outputs
set CONFIG=%~1
if "%CONFIG%"=="" set CONFIG=Release
set VSTOOLS="%VS100COMNTOOLS%"
if %VSTOOLS%=="" set "PATH=%PATH%;%WINDIR%\Microsoft.NET\Framework\v4.0.30319" && goto skipvsinit
call "%VSTOOLS:~1,-1%vsvars32.bat"
if errorlevel 1 goto end
:skipvsinit
msbuild.exe Project.csproj /t:WebPublish /p:Configuration=%CONFIG% /p:VisualStudioVersion=11.0 /p:WebPublishMethod=FileSystem /p:publishUrl=%OUTPUTS%\Project
if errorlevel 1 goto end
:end
popd
exit /b %ERRORLEVEL%
Ivan Samygin
quelle
Vielen Dank für diese Lösung - das war es, wonach ich gesucht habe: die WebPublish-Option mit Dateisystembereitstellung.
woohoo
12

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 ResolveReferencesdurch BuildZiel das Problem löst - jetzt werden alle erforderlichen Dateien in den OutDir-Speicherort kopiert.

msbuild / target: Build; _WPPCopyWebApplication / p: Konfiguration = Release; OutDir = C: \ Tmp \ myApp \ MyApp.csproj
Nachteil dieser Lösung war die Tatsache, dass OutDir nicht nur Dateien zum Veröffentlichen enthielt.

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.

msbuild / target: Build; PipelinePreDeployCopyAllFilesToOneFolder / p: Konfiguration = Freigabe; _PackageTempDir = C: \ Tmp \ myApp \; AutoParameterizationWebConfigConnectionStrings = false MyApp.csproj
AutoParameterizationWebConfigConnectionStrings=falseDer Parameter garantiert, dass Verbindungszeichenfolgen nicht als spezielle Artefakte behandelt und korrekt generiert werden. Weitere Informationen finden Sie unter Link .

Pavel Cermak
quelle
Ihre Option 2 hat mir geholfen, die veraltete _CopyWebApplication nahtlos loszuwerden. Sie haben meinen Build-Server nach dem Upgrade auf VS 2015 gerettet. Dankbar.
it3xl
Ihre Option 2 war perfekt für mein Build-Skript.
AnthonyVO
3

Sie müssen Ihre Umgebungen einstellen

  • <Name der Website>
  • <Domain>

und verweise auf meinen Blog (sorry Beitrag war Koreanisch)

  • http://xyz37.blog.me/50124665657
  • http://blog.naver.com/PostSearchList.nhn?SearchText=webdeploy&blogId=xyz37&x=25&y=7

    @ECHO OFF
    :: http://stackoverflow.com/questions/5598668/valid-parameters-for-msdeploy-via-msbuild
    ::-DeployOnBuild -True
    :: -False
    :: 
    ::-DeployTarget -MsDeployPublish
    :: -Package
    :: 
    ::-Configuration -Name of a valid solution configuration
    :: 
    ::-CreatePackageOnPublish -True
    :: -False
    :: 
    ::-DeployIisAppPath -<Web Site Name>/<Folder>
    :: 
    ::-MsDeployServiceUrl -Location of MSDeploy installation you want to use
    :: 
    ::-MsDeployPublishMethod -WMSVC (Web Management Service)
    :: -RemoteAgent
    :: 
    ::-AllowUntrustedCertificate (used with self-signed SSL certificates) -True
    :: -False
    :: 
    ::-UserName
    ::-Password
    SETLOCAL
    
    IF EXIST "%SystemRoot%\Microsoft.NET\Framework\v2.0.50727" SET FXPath="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727"
    IF EXIST "%SystemRoot%\Microsoft.NET\Framework\v3.5" SET FXPath="%SystemRoot%\Microsoft.NET\Framework\v3.5"
    IF EXIST "%SystemRoot%\Microsoft.NET\Framework\v4.0.30319" SET FXPath="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319"
    
    SET targetFile=<web site fullPath ie. .\trunk\WebServer\WebServer.csproj
    SET configuration=Release
    SET msDeployServiceUrl=https://<domain>:8172/MsDeploy.axd
    SET msDeploySite="<WebSite name>"
    SET userName="WebDeploy"
    SET password=%USERNAME%
    SET platform=AnyCPU
    SET msbuild=%FXPath%\MSBuild.exe /MaxCpuCount:%NUMBER_OF_PROCESSORS% /clp:ShowCommandLine
    
    %MSBuild% %targetFile% /p:configuration=%configuration%;Platform=%platform% /p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=False /p:DeployIISAppPath=%msDeploySite% /p:MSDeployPublishMethod=WMSVC /p:MsDeployServiceUrl=%msDeployServiceUrl% /p:AllowUntrustedCertificate=True /p:UserName=%USERNAME% /p:Password=%password% /p:SkipExtraFilesOnServer=True /p:VisualStudioVersion=12.0
    
    IF NOT "%ERRORLEVEL%"=="0" PAUSE 
    ENDLOCAL
Kim Ki Won
quelle
1

Dies ist meine Batch-Datei

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe C:\Projects\testPublish\testPublish.csproj  /p:DeployOnBuild=true /property:Configuration=Release
if exist "C:\PublishDirectory" rd /q /s "C:\PublishDirectory"
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p C:\Projects\testPublish\obj\Release\Package\PackageTmp -c C:\PublishDirectory
cd C:\PublishDirectory\bin 
del *.xml
del *.pdb
Alim İŞÇİ
quelle
5
Es wäre großartig, wenn Sie Ihre Antwort detaillieren könnten. Wie genau löst Ihre Batch-Datei das Problem des OP? Vielen Dank!
Luís Cruz
1

Das ist meine Arbeitscharge

publish-my-website.bat

SET MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin"
SET PUBLISH_DIRECTORY="C:\MyWebsitePublished"
SET PROJECT="D:\Github\MyWebSite.csproj"


cd /d %MSBUILD_PATH%
MSBuild %PROJECT%  /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%PUBLISH_DIRECTORY%

Beachten Sie, dass ich Visual Studio auf dem Server installiert habe, damit es ausgeführt werden kann, MsBuild.exeda die MsBuild.exeOrdner in .Net Framework nicht funktionieren.

Alper Ebicoglu
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? :(
Nishant
1

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.

@echo OFF 
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsMSBuildCmd.bat"
MSBuild.exe  D:\\Solution\\DataLink.sln /p:DeployOnBuild=true /p:PublishProfile=PublishInDFolder
pause
pradeep sk
quelle
0

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

Yashwant Mahawar
quelle