Jak publikować w sieci za pomocą msbuild?

216

Visual Studio 2010 ma polecenie Publikuj, które pozwala opublikować projekt aplikacji sieci Web w lokalizacji systemu plików. Chciałbym to zrobić na moim serwerze kompilacji TeamCity, więc muszę to zrobić za pomocą narzędzia do uruchamiania rozwiązań lub msbuild. Próbowałem użyć celu publikowania, ale myślę, że może to być dla ClickOnce:

msbuild Project.csproj /t:Publish /p:Configuration=Deploy

Zasadniczo chcę robić dokładnie to, co robi projekt wdrożenia internetowego, ale bez dodatku. Potrzebuję go do skompilowania WAP, usunięcia niepotrzebnych plików do wykonania, wykonania transformacji web.config i skopiowania danych wyjściowych do określonej lokalizacji.

Moje rozwiązanie , na podstawie odpowiedzi Jeffa Sivera

<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
źródło
możliwy duplikat: stackoverflow.com/questions/1162253/…
Steven Evers
@SnOrfus Obecnie używam projektów wdrażania sieci w VS 2008 (jak wspomniałem w odpowiedzi na to pytanie), ale zamiast tego chciałbym spróbować zautomatyzować funkcję publikowania VS 2010.
jrummell
To pytanie wygląda na pomocne stackoverflow.com/questions/1983575/…
jrummell
2
Tylko jedna mała poprawka do skryptu: używasz $ (ProjectPath) do skryptu wdrażania, ale tak naprawdę chcesz $ (ProjectDir), inaczej skończysz na .csproj \ obj
Troy Hunt
2
Począwszy od VS2012, jest to o wiele łatwiejsze: stackoverflow.com/a/13947667/270348
RobSiklos

Odpowiedzi:

137

Mam to głównie działa bez niestandardowego skryptu msbuild. Oto odpowiednie ustawienia konfiguracji kompilacji TeamCity:

Ścieżki artefaktów:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp 
Rodzaj biegacza: MSBuild (Runner dla plików MSBuild) 
Ścieżka pliku kompilacji: MyProject \ MyProject.csproj 
Katalog roboczy: taki sam jak katalog kasy 
Wersja MSBuild: Microsoft .NET Framework 4.0 
MSBuild ToolsVersion: 4.0 
Uruchom platformę: x86 
Cele: pakiet 
Parametry wiersza polecenia do MSBuild.exe: / p: Configuration = Debug

Spowoduje to skompilowanie, spakowanie (z transformacją web.config) i zapisanie danych wyjściowych jako artefaktów. Brakuje tylko kopiowania danych wyjściowych do określonej lokalizacji, ale można to zrobić w innej konfiguracji kompilacji TeamCity z zależnością od artefaktów lub za pomocą skryptu msbuild.

Aktualizacja

Oto skrypt msbuild, który skompiluje, spakuje (z transformacją web.config) i skopiuje dane wyjściowe na mój serwer pomostowy

<?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>

Można również usunąć właściwości SolutionName i ProjectName ze znacznika PropertyGroup i przekazać je do msbuild.

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

Aktualizacja 2

Ponieważ to pytanie wciąż generuje duży ruch, pomyślałem, że warto zaktualizować swoją odpowiedź za pomocą mojego obecnego skryptu, który używa Web Deploy (znanego również jako MSDeploy).

<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>

W TeamCity, mam parametrów nazwanych env.Configuration, env.ProjectNamea env.DeployServiceUrl. Program uruchamiający MSBuild ma ścieżkę pliku kompilacji, a parametry są przekazywane automatycznie (nie trzeba ich określać w parametrach wiersza poleceń).

Możesz również uruchomić go z wiersza poleceń:

msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService
jrummell
źródło
2
dzięki - działa to również dobrze bezpośrednio z programu PowerShell (przeprosiny za formatowanie - brak zwrotów karetki w komentarzach): & msbuild "$ solution" / p: "Configuration = $ configuration"; & msbuild "$ project" / t: Package / p: "Configuration = $ configuration; _PackageTempDir = $ outputfolder"
zcrar70
Wypróbowałem przykład z pierwszej aktualizacji i wydaje się, że Packagecel zależy również od WebDeploy: 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.(Wspominając o nim, ponieważ piszesz, że twoja druga aktualizacja używa WebDeploy, co może sugerować, że pierwsza nie użyłaby jeszcze WebDeploy.)
chiccodoro
@jrummell: Chcę wdrożyć mój projekt internetowy Visual Studio na zdalnym serwerze Windows z TeamCity. Co powinienem zrobić. Jestem początkującym i nie mam pojęcia, co robić
Nevin Raj Victor
1
Jestem w stanie sprawić, że będzie działać na TeamCity z projektami aplikacji internetowych, ale mam również związany ze starszymi projektami PROJEKT WWW, który muszę również opublikować (jako pakiet), a następnie użyć MSDeploy. Jeśli publikuję w VS2013, otrzymuję pakiet wdrożeniowy, ale MSBuild z linii cmd go nie tworzy. jakieś pomysły?
KnowHowSolutions
1
Nie widzę w tym żadnej wzmianki o profilu publikowania. Profil publikowania powinien zostać określony, aby zastosować poprawną transformację web.config. Aktualizacja: Nevermind ... ta funkcja została wprowadzona 2 lata po tym poście. Ten prawdopodobnie nadal działa. Późniejszy post w tym wątku pokazuje, jak publikować za pomocą profilu publikowania z wiersza poleceń.
Triynko
84

Korzystając z profili wdrażania wprowadzonych w VS 2012, można publikować za pomocą następującego wiersza polecenia:

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

Aby uzyskać więcej informacji na temat parametrów, zobacz to .

Wartości /p:VisualStudioVersionparametru zależą od wersji programu Visual Studio. Wikipedia ma tabelę wydań Visual Studio i ich wersji .

Chris
źródło
6
W przypadku VS2012 .NET 3.5 nie działało to w przypadku wdrażania w systemie plików. Po prostu buduje i nie wdraża.
Jay Sullivan
2
Twój /p:VisualStudioVersion=11.0 uratował mi życie. Używam /p:VisualStudioVersion=12.0 dla vs2013 i działa dobrze.
Seyed Morteza Mousavi
Jaka będzie wartość /p:VisualStudioVersion=?dla VS 2017?
Nishant
utworzono skrypt kompilacji 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 ...... Ale nadal otrzymuję tylko biblioteki DLL, a nie wszystkie pliki jak w folderze publikowania: (`
Nishant
@Nishant Dla VS 2017, użyj /p:VisualStudioVersion=15. Nie jestem pewien, czy jest to związane z problemem z kopiowaniem plików.
Chris
38

Wymyśliłem takie rozwiązanie, działa świetnie dla mnie:

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

Tajny sos jest celem _WPPCopyWebApplication.

Alexander Beletsky
źródło
1
Co to jest _WPPCopyWebApplication i jak mogę go używać Plik konfiguracyjny xml MSBbuild /
Johnny_D 11.09.2013
4
Używając VS2012 .NET 3.5, dostałem błąd error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project. Wyjęcie tej części doprowadziło do wdrożenia bez wdrożenia żadnych widoków
Jay Sullivan
Może być konieczne wywołanie go z innym /p:VisualStudioVersion=12.0, ponieważ build używa celów z c: \ program files (x86) \ msbuild \ microsoft \ visualstudio \ VERSION \ Webapplication \ Microsoft.WebApplication.targets, więc może używa starsza wersja, która nie ma poprawnego celu.
Jim Wolff,
@FRoZeN Próbowałem użyć MSBuild as 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. Daje mi błąd MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Czy jest na to rozwiązanie?
Nevin Raj Victor
1
@NevinRajVictor ten błąd jest prawdopodobny, ponieważ masz spację w wartości DeployIisAppPath. Musisz podać wartość w cudzysłowie. np. / p: DeployIisAppPath = "Domyślna strona internetowa / Nowa"
shiitake
27

Nie znam TeamCity, więc mam nadzieję, że to zadziała.

Najlepszym sposobem, jaki udało mi się to zrobić, jest MSDeploy.exe. Jest to część projektu WebDeploy prowadzonego przez Microsoft. Możesz pobrać bity tutaj .

W WebDeploy uruchamiasz wiersz poleceń

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

To robi to samo, co polecenie VS Publish, kopiując tylko niezbędne bity do folderu wdrażania.

Jeff Siver
źródło
To wygląda obiecująco. Wygląda jednak na to, że Usługa zarządzania jest dostępna tylko na serwerze 2008. Mój serwer pomostowy (na którym chcę zautomatyzować wdrażanie) ma system Windows 7 Pro.
jrummell
2
Produkt składa się z dwóch części. Elementy, które integrują się bezpośrednio z IIS, wymagają Server 2008. Komponent wiersza poleceń nie ma tego wymagania; Mam go uruchomionego na serwerze Server 2003, którego używam do wdrażania.
Jeff Siver
Przeczytałem o MSDeploy. Mam zainstalowany i działam na moim serwerze testowym, dzięki! Czy mogę uruchomić MSDeploy ze skryptu MSBuild?
jrummell
1
robi to samo, co konfiguracja polecenia VS Publish? Która metoda publikowania - system plików lub inny? Czy używa pliku MyProject.Publish.xml do ustalenia, które pliki należy skopiować?
Anthony
1
Właśnie spróbowałem, ale nie zrobiło to tego samego co VS Publish. Zrobił to samo co XCopy, włączając wszystkie pliki źródłowe.
Louis Somers
13

W VisualStudio 2012 istnieje sposób obsługi subj bez profili publikowania. Możesz przekazać folder wyjściowy za pomocą parametrów. Działa zarówno ze ścieżką bezwzględną, jak i względną w parametrze „PublueUrl”. Możesz użyć VS100COMNTOOLS, jednak musisz zastąpić VisualStudioVersion, aby użyć docelowego „WebPublish” %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets. Z VisualStudioVersion 10.0 ten skrypt się powiedzie bez żadnych wyników :)

Aktualizacja: Udało mi się użyć tej metody na serwerze kompilacji z zainstalowanym tylko pakietem Windows SDK 7.1 (bez programu Visual Studio 2010 i 2012 na komputerze). Ale musiałem wykonać następujące kroki, aby to zadziałało:

  1. Uaktualnij zestaw Windows SDK 7.1 na komputerze, używając odpowiedzi Simmo ( https://stackoverflow.com/a/2907056/2164198 )
  2. Ustawienie klucza rejestru HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ SxS \ VS7 \ 10.0 na „C: \ Program Files \ Microsoft Visual Studio 10.0 \” (użyj odpowiedniej ścieżki)
  3. Kopiowanie folderu% ProgramFiles% \ MSBuild \ Microsoft \ VisualStudio \ v11.0 z mojego komputera programisty, aby zbudować serwer

Scenariusz:

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
źródło
Dzięki za to rozwiązanie - tego właśnie szukałem: opcji WebPublish z wdrożeniem systemu plików.
woohoo
12

znalazł dwa różne rozwiązania, które działały w nieco inny sposób:

1. To rozwiązanie jest inspirowane odpowiedzią Alexandra [link] . Niestety nie działało to dla nas - niektóre pliki dll nie zostały skopiowane do OutDir. Okazało się, że zastąpienie ResolveReferencesw Buildcelu rozwiązuje problemu - teraz wszystkie niezbędne pliki są kopiowane do lokalizacji OUTDIR.

msbuild / target: Build; _WPPCopyWebApplication / p: Configuration = Release; OutDir = C: \ Tmp \ myApp \ MyApp.csproj
Wadą tego rozwiązania był fakt, że OutDir zawierał nie tylko pliki do publikacji.

2. Pierwsze rozwiązanie działa dobrze, ale nie tak, jak się spodziewaliśmy. Chcieliśmy mieć funkcjonalność publikowania taką, jaka jest w Visual Studio IDE - tzn. Tylko pliki, które powinny zostać opublikowane, zostaną skopiowane do katalogu Output. Jak już wspomniano, pierwsze rozwiązanie kopiuje znacznie więcej plików do OutDir - strona internetowa do publikacji jest następnie przechowywana w _PublishedWebsites/{ProjectName}podfolderze. Poniższe polecenie rozwiązuje ten problem - tylko pliki do opublikowania zostaną skopiowane do żądanego folderu. Masz teraz katalog, który można bezpośrednio opublikować - w porównaniu z pierwszym rozwiązaniem zaoszczędzisz trochę miejsca na dysku twardym.

msbuild / target: Build; PipelinePreDeployCopyAllFilesToOneFolder / p: Configuration = Release; _PackageTempDir = C: \ Tmp \ myApp \; AutoParameterizationWebConfigConnectionStrings = false MyApp.csproj
AutoParameterizationWebConfigConnectionStrings=falseparametr zagwarantuje, że parametry połączenia nie będą traktowane jako specjalne artefakty i zostaną poprawnie wygenerowane - więcej informacji znajduje się w linku .

Pavel Cermak
źródło
Twoja opcja nr 2 pomogła mi bezproblemowo pozbyć się przestarzałej aplikacji _CopyWebApplication. Uratowałeś mój Build-Server po aktualizacji do VS 2015. Świetne badania. Mający zrozumienie.
it3xl
Twoja opcja nr 2 była idealna do mojego skryptu kompilacji.
AnthonyVO
3

Musisz ustawić swoje środowiska

  • <Nazwa strony internetowej>
  • <domena>

i odnieś się do mojego bloga. (przepraszam post był koreański)

  • 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
źródło
1

To mój plik wsadowy

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 İŞÇİ
źródło
5
Byłoby wspaniale, gdybyś mógł szczegółowo opisać swoją odpowiedź. Jak dokładnie Twój plik wsadowy rozwiązuje problem PO? Dzięki!
Luís Cruz,
1

to moja działająca partia

Publiczna-moja-strona.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%

Zauważ, że zainstalowałem Visual Studio na serwerze, aby móc uruchomić, MsBuild.exeponieważ MsBuild.exefoldery w .Net Framework nie działają.

Alper Ebicoglu
źródło
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 ...... Ale nadal otrzymuję tylko biblioteki DLL, a nie strukturę plików, której chcę. Co jest z tym nie tak? :(
Nishant
1

Możesz opublikować rozwiązanie z pożądaną ścieżką za pomocą poniższego kodu, tutaj PublishInDFolder to nazwa, która ma ścieżkę, w której musimy opublikować (musimy to utworzyć w poniższym obrazku)

Możesz utworzyć plik publikowania w ten sposób

Dodaj poniżej 2 wierszy kodu w pliku wsadowym (.bat)

@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
źródło
0

Aby wygenerować wynik publikowania, podaj jeszcze jeden parametr. msbuild example.sln / p: opublikuj profil = nazwa profilu / p: deployonbuild = prawda / p: konfiguracja = debuguj / lub dowolny

Yashwant Mahawar
źródło