วิธีการเผยแพร่เว็บด้วย msbuild


216

Visual Studio 2010 มีคำสั่งเผยแพร่ที่ให้คุณเผยแพร่เว็บแอปพลิเคชั่นโครงการไปยังตำแหน่งระบบไฟล์ ฉันต้องการทำสิ่งนี้บนเซิร์ฟเวอร์การสร้าง TeamCity ของฉันดังนั้นฉันต้องทำกับตัวแก้ปัญหาหรือ msbuild ฉันพยายามใช้เป้าหมายเผยแพร่ แต่ฉันคิดว่านั่นอาจเป็นเพราะ ClickOnce:

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

โดยทั่วไปฉันต้องการทำสิ่งที่โครงการปรับใช้บนเว็บทำ แต่ไม่มีการเพิ่มเข้า ฉันต้องการคอมไพล์ WAP, ลบไฟล์ใด ๆ ที่ไม่จำเป็นสำหรับการประมวลผล, ทำการแปลง web.configใด ๆและคัดลอกผลลัพธ์ไปยังตำแหน่งที่ระบุ

โซลูชันของฉันขึ้นอยู่กับคำตอบของ Jeff Siver

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

เป็นไปได้ซ้ำ: stackoverflow.com/questions/1162253/…
Steven Evers

@SnOrfus ฉันกำลังใช้ Web Deployment Projects ใน VS 2008 (ดังที่ฉันได้กล่าวไว้ในคำตอบสำหรับคำถามนั้น) แต่ฉันต้องการลองใช้คุณสมบัติ Publish ของ VS 2010 แทนโดยอัตโนมัติ
jrummell

คำถามนี้มีประโยชน์stackoverflow.com/questions/1983575/…
jrummell

2
เพียงแค่การแก้ไขสคริปต์ของคุณเพียงเล็กน้อย: คุณกำลังใช้ $ (ProjectPath) สำหรับสคริปต์การปรับใช้ แต่คุณต้องการให้เป็น $ (ProjectDir) ไม่เช่นนั้นคุณจะได้. csproj \ obj
Troy Hunt

2
เริ่มต้นด้วย VS2012 สิ่งนี้ง่ายกว่ามาก: stackoverflow.com/a/13947667/270348
RobSiklos

คำตอบ:


137

ฉันได้รับมันส่วนใหญ่ทำงานโดยไม่มีสคริปต์ msbuild ที่กำหนดเอง นี่คือการตั้งค่าการกำหนดค่าการสร้าง TeamCity ที่เกี่ยวข้อง:

เส้นทางของสิ่งประดิษฐ์:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp 
ประเภทของนักวิ่ง: MSBuild (Runner สำหรับไฟล์ MSBuild) 
สร้างเส้นทางของไฟล์: MyProject \ MyProject.csproj 
ไดเรกทอรีการทำงาน: เหมือนกับไดเรกทอรีชำระเงิน 
รุ่น MSBuild: Microsoft .NET Framework 4.0 
MSBuild ToolsVersion: 4.0 
เรียกใช้แพลตฟอร์ม: x86 
เป้าหมาย: แพ็คเกจ 
พารามิเตอร์บรรทัดคำสั่งเพื่อ MSBuild.exe: / p: Configuration = Debug

สิ่งนี้จะคอมไพล์แพ็คเกจ (ด้วยการแปลง web.config) และบันทึกผลลัพธ์เป็นส่วน สิ่งเดียวที่ขาดหายไปคือการคัดลอกเอาต์พุตไปยังตำแหน่งที่ระบุ แต่สามารถทำได้ในการกำหนดค่าการสร้างของ TeamCity อื่นด้วยการพึ่งพาสิ่งประดิษฐ์หรือสคริปต์ msbuild

ปรับปรุง

นี่คือสคริปต์ msbuild ที่จะรวบรวมแพ็คเกจ (พร้อมการแปลง web.config) และคัดลอกผลลัพธ์ไปยังเซิร์ฟเวอร์ staging ของฉัน

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

คุณยังสามารถลบคุณสมบัติ SolutionName และ ProjectName จากแท็ก PropertyGroup และส่งต่อไปยัง msbuild

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

อัปเดต 2

เนื่องจากคำถามนี้ยังคงได้รับปริมาณข้อมูลที่ดีฉันคิดว่ามันคุ้มค่าที่จะอัปเดตคำตอบของฉันด้วยสคริปต์ปัจจุบันของฉันที่ใช้Web Deploy (หรือที่รู้จักในชื่อ 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>

ใน TeamCity ฉันมีพารามิเตอร์ชื่อenv.Configuration, และenv.ProjectName env.DeployServiceUrlนักวิ่ง MSBuild มีพา ธ ไฟล์บิลด์และพารามิเตอร์ถูกส่งโดยอัตโนมัติ (คุณไม่จำเป็นต้องระบุในพารามิเตอร์บรรทัดคำสั่ง)

คุณสามารถเรียกใช้จากบรรทัดคำสั่ง:

msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService

2
ขอบคุณ - นี่ยังทำงานได้ดีโดยตรงจาก powershell (ขออภัยสำหรับการจัดรูปแบบ - ไม่มีการคืนค่าความคิดเห็น): & msbuild "$ solution" / p: "Configuration = $ configuration"; & msbuild "$ project" / t: แพ็คเกจ / p: "การกำหนดค่า = การกำหนดค่า $; _PackageTempDir = $ outputfolder"
zcrar70

ฉันพยายามตัวอย่างเช่นจากการปรับปรุงครั้งแรกของคุณและมันดูเหมือนว่าPackageเป้าหมายขึ้นอยู่กับ 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.(กล่าวถึงมันตั้งแต่ที่คุณเขียนว่าการปรับปรุงที่สองของคุณใช้ WebDeploy ซึ่งอาจบ่งบอกถึงคนแรกที่จะไม่ใช้ WebDeploy ยัง.)
chiccodoro

@jrummell: ฉันต้องการปรับใช้โครงการ Visual Studio เว็บของฉันกับเซิร์ฟเวอร์ Windows ระยะไกลจาก TeamCity ฉันควรทำอย่างไรดี. ฉันเป็นผู้เริ่มต้นและไม่รู้ว่าจะทำอย่างไร
Nevin Raj Victor

1
ฉันสามารถใช้สิ่งนี้เพื่อทำงานกับ TeamCity ด้วย Web Application Projects แต่ฉันมีโปรเจ็กต์เว็บไซต์ที่ถูกต้องตามกฎหมายซึ่งฉันต้องเผยแพร่ (เป็นแพ็คเกจ) จากนั้นจึงต้องใช้ MSDeploy หากฉันเผยแพร่ภายใน VS2013 ฉันจะได้รับแพ็คเกจการปรับใช้ แต่ MSBuild จากบรรทัด cmd ไม่ได้สร้างขึ้นมา ความคิดใด ๆ
KnowHowSolutions

1
ฉันไม่เห็นการกล่าวถึงโปรไฟล์เผยแพร่ในนี้ ควรระบุโปรไฟล์การเผยแพร่เพื่อให้การแปลง web.config ถูกต้อง อัปเดต: ไม่เป็นไร ... ฟีเจอร์นั้นเปิดตัว 2 ปีหลังจากโพสต์นี้ อันนี้ยังคงใช้งานได้ โพสต์ในภายหลังในหัวข้อนี้แสดงวิธีเผยแพร่ด้วยโพรไฟล์เผยแพร่จากบรรทัดคำสั่ง
Triynko

84

การใช้โปรไฟล์การปรับใช้ที่นำมาใช้ใน VS 2012 คุณสามารถเผยแพร่ด้วยบรรทัดคำสั่งต่อไปนี้:

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ที่เห็นนี้

ค่าสำหรับ/p:VisualStudioVersionพารามิเตอร์ขึ้นอยู่กับรุ่นของ Visual Studio วิกิพีเดียมีตารางของรุ่นของ Visual Studio และรุ่นของพวกเขา


6
ใช้ VS2012 .NET 3.5 สิ่งนี้ไม่สามารถใช้ในการปรับใช้กับระบบไฟล์ มันสร้างและไม่ปรับใช้
Jay Sullivan

2
/p:VisualStudioVersion=11.0 ของคุณช่วยชีวิตฉันไว้ ฉันใช้ /p:VisualStudioVersion=12.0 สำหรับ vs2013 และทำงานได้ดี
Seyed Morteza Mousavi

สิ่งที่จะเป็นค่า/p:VisualStudioVersion=?สำหรับ VS 2017
Nishant

สร้างบิวด์สคริปต์ 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 ...... แต่ยังรับไฟล์ DLL เพียงไฟล์เดียวเท่านั้นที่ยังไม่ได้เผยแพร่ในโฟลเดอร์: (`
Nishant

@Nishant สำหรับ VS 2017, /p:VisualStudioVersion=15การใช้งาน ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับปัญหาการคัดลอกไฟล์ของคุณหรือไม่
Chris

38

ฉันมาด้วยวิธีแก้ปัญหาดังกล่าวใช้งานได้ดีสำหรับฉัน:

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

ซอสลับคือ _WPPCopyWebApplication เป้าหมาย


1
_WPPCopyWebApplication คืออะไรและฉันจะใช้ไฟล์ปรับแต่ง MSBbuild xml ได้อย่างไร /
Johnny_D

4
ใช้ VS2012 NET 3.5 error MSB4057: The target "_WPPCopyWebApplication" does not exist in the projectผมได้ข้อผิดพลาด การออกส่วนนั้นนำไปสู่การปรับใช้โดยไม่ต้องปรับใช้มุมมองใด ๆ
Jay Sullivan

คุณอาจต้องเรียกมันด้วย /p:VisualStudioVersion=12.0 อื่นเนื่องจากบิวด์ใช้เป้าหมายจากไฟล์ c: \ program (x86) \ msbuild \ microsoft \ visualstudio \ VERSION \ Webapplication \ Microsoft.WebApplication.targets ดังนั้นอาจใช้แอพนี้ เวอร์ชันเก่ากว่าที่ไม่มีเป้าหมายที่ถูกต้อง
Jim Wolff

@FRoZeN ฉันพยายามใช้ MSBuild 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เป็น MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/Newมันทำให้ฉันมีข้อผิดพลาด มีวิธีแก้ปัญหาสำหรับเรื่องนี้หรือไม่?
Nevin Raj Victor

1
@NevinRajVictor ข้อผิดพลาดนั้นน่าจะเป็นเพราะคุณมีช่องว่างในค่า DeployIisAppPath คุณจะต้องใส่ค่าในเครื่องหมายคำพูด เช่น / p: DeployIisAppPath = "เว็บไซต์เริ่มต้น / ใหม่"
shiitake

27

ฉันไม่รู้จัก TeamCity ดังนั้นฉันหวังว่านี่จะเป็นประโยชน์กับคุณ

วิธีที่ดีที่สุดที่ฉันพบคือทำกับ MSDeploy.exe นี่เป็นส่วนหนึ่งของโครงการ WebDeploy ที่ดำเนินการโดย Microsoft คุณสามารถดาวน์โหลดบิตที่นี่

ด้วย WebDeploy คุณเรียกใช้บรรทัดคำสั่ง

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

สิ่งนี้ทำสิ่งเดียวกันกับคำสั่ง VS Publish คัดลอกเฉพาะบิตที่จำเป็นไปยังโฟลเดอร์การปรับใช้


ที่ดูมีแนวโน้ม อย่างไรก็ตามดูเหมือนว่าบริการการจัดการจะมีให้เฉพาะใน Server 2008 เซิร์ฟเวอร์การจัดเตรียมของฉัน (ที่ฉันต้องการทำการปรับใช้อัตโนมัติ) กำลังเรียกใช้ Windows 7 Pro
jrummell

2
มีสินค้าสองชิ้น ชิ้นส่วนที่รวมเข้ากับ IIS จำเป็นต้องมี Server 2008 ส่วนประกอบของบรรทัดคำสั่งไม่มีข้อกำหนดดังกล่าว ฉันให้มันทำงานบนกล่อง Server 2003 ที่ฉันใช้สำหรับการปรับใช้
Jeff Siver

ฉันอ่าน MSDeploy เสร็จแล้ว ฉันได้รับการติดตั้งและใช้งานเซิร์ฟเวอร์การแสดงละครขอบคุณ! ฉันสามารถรัน MSDeploy ได้จากสคริปต์ MSBuild หรือไม่?
jrummell

1
เหมือนกับการกำหนดค่าของคำสั่ง VS Publish อะไร วิธีการเผยแพร่ใด - ระบบไฟล์หรืออื่น ๆ มันใช้ไฟล์ MyProject.Publish.xml เพื่อพิจารณาว่าจะคัดลอกไฟล์ใดบ้าง
แอนโธนี

1
ฉันเพิ่งจะให้มันยิง แต่มันไม่ได้ทำเช่นเดียวกับ VS Publish มันทำเช่นเดียวกับ XCopy รวมถึงไฟล์ต้นฉบับทั้งหมด
Louis Somerset

13

ด้วย VisualStudio 2012 มีวิธีจัดการ subj โดยไม่ต้องเผยแพร่โปรไฟล์ คุณสามารถส่งผ่านโฟลเดอร์เอาท์พุทโดยใช้พารามิเตอร์ มันทำงานได้ทั้งกับเส้นทางที่แน่นอนและสัมพันธ์ในพารามิเตอร์ 'publishUrl' คุณสามารถใช้ VS100COMNTOOLS แต่คุณต้องแทนที่ VisualStudioVersion กับการใช้เป้าหมาย 'WebPublish %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targetsจาก ด้วย VisualStudioVersion 10.0 สคริปต์นี้จะประสบความสำเร็จโดยไม่มีผลลัพธ์ :)

อัปเดต:ฉันได้รับการจัดการให้ใช้วิธีนี้บนบิลด์เซิร์ฟเวอร์ที่ติดตั้ง Windows SDK 7.1 (ไม่มี Visual Studio 2010 และ 2012 บนเครื่อง) แต่ฉันต้องทำตามขั้นตอนเหล่านี้เพื่อให้มันใช้งานได้:

  1. ทำให้ Windows SDK 7.1 เป็นปัจจุบันบนเครื่องโดยใช้คำตอบ Simmo ( https://stackoverflow.com/a/2907056/2164198 )
  2. การตั้งค่ารีจิสทรีคีย์ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ SxS \ VS7 \ 10.0 เป็น "Visual Studio Files \ Microsoft Visual Studio 10.0 \" (ใช้เส้นทางของคุณตามความเหมาะสม)
  3. คัดลอกโฟลเดอร์% ProgramFiles% \ MSBuild \ Microsoft \ VisualStudio \ v11.0 จากเครื่องนักพัฒนาของฉันเพื่อสร้างเซิร์ฟเวอร์

สคริปต์:

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%

ขอบคุณสำหรับโซลูชันนี้ - นี่คือสิ่งที่ฉันกำลังมองหา: ตัวเลือก WebPublish พร้อมการปรับใช้ระบบไฟล์
woohoo

12

พบโซลูชันที่แตกต่างกันสองวิธีซึ่งทำงานในลักษณะที่แตกต่างกันเล็กน้อย:

1. การแก้ปัญหานี้เป็นแรงบันดาลใจคำตอบจาก alexanderb [ลิงค์] น่าเสียดายที่มันไม่ได้ผลสำหรับเรา - dll บางตัวไม่ได้คัดลอกไปยัง OutDir เราพบว่าการแทนที่ResolveReferencesด้วยBuildเป้าหมายแก้ปัญหา - ตอนนี้ไฟล์ที่จำเป็นทั้งหมดจะถูกคัดลอกไปยังตำแหน่ง OutDir

msbuild / target: Build; _WPPCopyWebApplication / p: Configuration = Release; OutDir = C: \ Tmp \ myApp \ MyApp.csproj
ข้อเสียของการแก้ปัญหานี้คือความจริงที่ว่า OutDir ไม่เพียง แต่มีไฟล์สำหรับการเผยแพร่

2. ทางออกแรกทำงานได้ดี แต่ไม่เป็นไปตามที่เราคาดไว้ เราต้องการให้มีฟังก์ชั่นการเผยแพร่ตามที่อยู่ใน Visual Studio IDE - เช่นไฟล์ที่ควรเผยแพร่เท่านั้นที่จะถูกคัดลอกไปยังไดเรกทอรีออก เนื่องจากได้มีการกล่าวถึงวิธีแรกในการคัดลอกไฟล์จำนวนมากไปยัง OutDir - เว็บไซต์สำหรับการเผยแพร่จะถูกจัดเก็บใน_PublishedWebsites/{ProjectName}โฟลเดอร์ย่อย คำสั่งต่อไปนี้แก้ปัญหานี้ - เฉพาะไฟล์สำหรับการเผยแพร่เท่านั้นที่จะถูกคัดลอกไปยังโฟลเดอร์ที่ต้องการ ดังนั้นตอนนี้คุณมีไดเรกทอรีที่สามารถเผยแพร่โดยตรง - เมื่อเทียบกับโซลูชั่นแรกคุณจะประหยัดพื้นที่ในฮาร์ดไดรฟ์

msbuild / target: Build; PipelinePreDeployCopyAllFilesToOneFolder / p: Configuration = Release; _PackageTempDir = C: \ Tmp \ myApp \; AutoParameterizationWebConfigConnectionStrings = false MyApp.csproj
AutoParameterizationWebConfigConnectionStrings=falseพารามิเตอร์ที่จะรับประกันได้ว่าสตริงการเชื่อมต่อจะไม่ได้รับการจัดการกับอุปกรณ์พิเศษและจะถูกสร้างขึ้นอย่างถูกต้อง - สำหรับข้อมูลเพิ่มเติมโปรดดูที่ลิงค์


ตัวเลือกของคุณ # 2 ช่วยฉันในการกำจัด _CopyWebApplication ที่ล้าสมัยได้อย่างราบรื่น คุณช่วยสร้างเซิร์ฟเวอร์ของฉันหลังจากอัปเกรดเป็น VS 2015 การวิจัยที่ยอดเยี่ยม เห็นคุณค่า
it3xl

ตัวเลือกของคุณ # 2 เหมาะสำหรับสคริปต์สร้างของฉัน
AnthonyVO

3

คุณต้องตั้งค่าสภาพแวดล้อมของคุณ

  • <ชื่อเว็บไซต์>
  • <โดเมน>

และอ้างอิงบล็อกของฉัน (ขออภัยโพสต์เป็นภาษาเกาหลี)

  • 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

1

นี่แบทช์ไฟล์ของฉัน

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

5
มันจะดีถ้าคุณสามารถให้รายละเอียดคำตอบของคุณ ไฟล์แบทช์ของคุณแก้ไขปัญหา OP ได้อย่างไร? ขอบคุณ!
Luís Cruz

1

นี่คือชุดการทำงานของฉัน

เผยแพร่-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%

โปรดทราบว่าฉันติดตั้ง Visual Studio บนเซิร์ฟเวอร์เพื่อให้สามารถทำงานได้MsBuild.exeเนื่องจากMsBuild.exeโฟลเดอร์ in .Net Framework ไม่ทำงาน


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 ...... แต่ยังคงได้รับ DLLs เท่านั้นไม่ใช่โครงสร้างไฟล์ที่ฉันต้องการ มีอะไรผิดปกติกับมัน? :(
Nishant

1

คุณสามารถเผยแพร่โซลูชันพร้อมเส้นทางที่ต้องการโดยโค้ดด้านล่างนี่ PublishInDFolder เป็นชื่อที่มีเส้นทางที่เราต้องการเผยแพร่ (เราต้องสร้างมันในรูปด้านล่าง)

คุณสามารถสร้างไฟล์เผยแพร่เช่นนี้

เพิ่มโค้ดด้านล่าง 2 บรรทัดในไฟล์แบตช์ (.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

0

สำหรับการสร้างเอาต์พุตการเผยแพร่ให้พารามิเตอร์อีกหนึ่งพารามิเตอร์ msbuild example.sln / p: publishprofile = profilename / p: deployonbuild = true / p: configuration = debug / หรือใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.