Làm thế nào để xuất bản web với msbuild?


216

Visual Studio 2010 có lệnh Xuất bản cho phép bạn xuất bản Dự án Ứng dụng Web của bạn đến một vị trí hệ thống tệp. Tôi muốn làm điều này trên máy chủ xây dựng TeamCity của tôi, vì vậy tôi cần phải làm điều đó với người chạy giải pháp hoặc msbuild. Tôi đã thử sử dụng mục tiêu Xuất bản, nhưng tôi nghĩ đó có thể là dành cho ClickOnce:

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

Về cơ bản tôi muốn làm chính xác những gì một dự án triển khai web làm, nhưng không có bổ trợ. Tôi cần nó để biên dịch WAP, loại bỏ bất kỳ tệp nào không cần thiết để thực thi, thực hiện bất kỳ chuyển đổi web.config nào và sao chép đầu ra vào một vị trí đã chỉ định.

Giải pháp của tôi , dựa trên câu trả lời của 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>


@SnOrfus Tôi hiện đang sử dụng Dự án triển khai web trong VS 2008 (như tôi đã đề cập trong câu trả lời của mình cho câu hỏi đó) nhưng tôi muốn thử tự động hóa tính năng Xuất bản của VS 2010 thay thế.
jrummell

Câu hỏi này có vẻ hữu ích stackoverflow.com/questions/1983575/ từ
jrummell

2
Chỉ cần một sửa đổi nhỏ cho tập lệnh của bạn: bạn đang sử dụng $ (ProjectPath) cho tập lệnh triển khai nhưng bạn thực sự muốn là $ (ProjectDir) nếu không, bạn kết thúc bằng .csproj \ obj
Troy Hunt

2
Bắt đầu với VS2012, việc này dễ dàng hơn nhiều: stackoverflow.com/a/13947667/270348
RobSiklos

Câu trả lời:


137

Tôi đã nhận nó chủ yếu làm việc mà không có một kịch bản msbuild tùy chỉnh. Dưới đây là các cài đặt cấu hình bản dựng TeamCity có liên quan:

Đường dẫn giả tạo:% system.teamcity.build. WorkDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp 
Loại người chạy: MSBuild (Người chạy cho các tệp MSBuild) 
Xây dựng đường dẫn tệp: MyProject \ MyProject.csproj 
Thư mục làm việc: giống như thư mục thanh toán 
Phiên bản MSBuild: Microsoft .NET Framework 4.0 
Công cụ MSBuildVersion: 4.0 
Chạy nền tảng: x86 
Mục tiêu: Gói 
Tham số dòng lệnh tới MSBuild.exe: / p: Cấu hình = Gỡ lỗi

Điều này sẽ biên dịch, gói (với chuyển đổi web.config) và lưu kết quả đầu ra dưới dạng các tạo phẩm. Điều duy nhất còn thiếu là sao chép đầu ra vào một vị trí được chỉ định, nhưng điều đó có thể được thực hiện trong một cấu hình xây dựng TeamCity khác với sự phụ thuộc giả tạo hoặc với tập lệnh msbuild.

Cập nhật

Đây là tập lệnh msbuild sẽ biên dịch, gói (với chuyển đổi web.config) và sao chép đầu ra vào máy chủ dàn của tôi

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

Bạn cũng có thể xóa các thuộc tính SolutionName và ProjectName khỏi thẻ Propertygroup và chuyển chúng cho msbuild.

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

Cập nhật 2

Vì câu hỏi này vẫn nhận được nhiều lưu lượng truy cập, tôi nghĩ rằng nó đáng để cập nhật câu trả lời của tôi với tập lệnh hiện tại của tôi sử dụng Triển khai Web (còn được gọi là 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>

Trong TeamCity, tôi có các thông số được đặt tên env.Configuration, env.ProjectNameenv.DeployServiceUrl. Trình chạy MSBuild có đường dẫn tệp xây dựng và các tham số được truyền tự động (bạn không phải chỉ định chúng trong tham số dòng lệnh).

Bạn cũng có thể chạy nó từ dòng lệnh:

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

2
cảm ơn - điều này cũng hoạt động tốt trực tiếp từ powershell (xin lỗi về định dạng - không trả lại vận chuyển trong các bình luận): & msbuild "$ Solution" / p: "Cấu hình = $ configure"; & msbuild "$ project" / t: Gói / p: "Cấu hình = $ configure; _PackageTempDir = $ outputfolder"
zcrar70

Tôi đã thử ví dụ từ Bản cập nhật đầu tiên của bạn và có vẻ như Packagemục tiêu cũng phụ thuộc vào 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.(Nhắc đến nó khi bạn viết rằng bản cập nhật thứ hai của bạn sử dụng WebDeploy, có thể ngụ ý lần đầu tiên sẽ không sử dụng WebDeploy.)
chiccodoro

@jrummell: Tôi muốn triển khai dự án web Visual Studio của mình đến một máy chủ Windows từ xa từ TeamCity. Tôi nên làm gì. Tôi là người mới bắt đầu và không biết phải làm gì
Nevin Raj Victor

1
Tôi có thể làm điều này để hoạt động trên TeamCity với các dự án ứng dụng web, nhưng tôi cũng có một DỰ ÁN trang web ràng buộc di sản mà tôi cũng cần xuất bản (dưới dạng gói) sau đó cần sử dụng MSDeploy. Nếu tôi xuất bản trong VS2013, tôi nhận được gói triển khai, nhưng MSBuild từ dòng cmd không tạo được gói. Có suy nghĩ gì không?
knowHowSolutions

1
Tôi không thấy bất kỳ đề cập đến hồ sơ xuất bản trong này. Xuất bản hồ sơ nên được chỉ định để biến đổi web.config chính xác được áp dụng. Cập nhật: Nevermind ... tính năng đó đã được giới thiệu 2 năm sau bài đăng này. Điều này có lẽ vẫn còn hoạt động. Bài đăng sau này trong chủ đề này cho thấy làm thế nào để xuất bản với một hồ sơ xuất bản từ dòng lệnh.
Triynko

84

Sử dụng các cấu hình triển khai được giới thiệu trong VS 2012, bạn có thể xuất bản với dòng lệnh sau:

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

Để biết thêm thông tin về các tham số xem điều này .

Các giá trị cho /p:VisualStudioVersiontham số phụ thuộc vào phiên bản Visual Studio của bạn. Wikipedia có một bảng phát hành Visual Studio và các phiên bản của chúng .


6
Sử dụng VS2012 .NET 3.5, điều này không hoạt động để triển khai vào hệ thống tệp. Nó chỉ đơn giản là xây dựng và không triển khai.
Jay Sullivan

2
/p:VisualStudioVersion=11.0 đã cứu mạng tôi. Tôi sử dụng /p:VisualStudioVersion=12.0 cho vs2013 và nó hoạt động tốt.
Seyed Morteza Mousavi

Giá trị /p:VisualStudioVersion=?cho VS 2017 sẽ là gì?
Nishant

đã tạo tập lệnh xây dựng 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 ...... Nhưng vẫn chỉ nhận được các tệp DLL chứ không phải tất cả các tệp như trong thư mục xuất bản: (`
Nishant

@Nishant Dành cho VS 2017, sử dụng /p:VisualStudioVersion=15. Tôi không chắc chắn nếu điều này có liên quan đến vấn đề sao chép tập tin của bạn.
Chris

38

Tôi đã đưa ra giải pháp như vậy, làm việc rất tốt cho tôi:

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

Nước sốt bí mật là mục tiêu _WPPCopyWebApplication.


1
_WPPCopyWebApplication là gì và làm cách nào tôi có thể sử dụng tệp cấu hình MSBbuild xml /
Johnny_D

4
Sử dụng VS2012 .NET 3.5, tôi đã gặp lỗi error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project. Loại bỏ phần đó đã dẫn đến việc triển khai mà không triển khai bất kỳ chế độ xem nào
Jay Sullivan

Bạn có thể cần gọi nó bằng một /p:VisualStudioVersion=12.0 khác vì bản dựng sử dụng các mục tiêu từ các tệp c: \ chương trình (x86) \ msbuild \ microsoft \ visualstudio \ VERSION \ Webapplication \ Microsoft.WebApplication.t Target để có thể sử dụng một phiên bản cũ hơn không có mục tiêu chính xác.
Jim Wolff

@FRoZeN Tôi đã thử sử dụng MSBuild như 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. Nó cho tôi một lỗi MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. đó có phải là cách giải quyết?
Nevin Raj Victor

1
@NevinRajVictor lỗi đó có khả năng là do bạn có một khoảng trống trong giá trị DeployIisAppPath. Bạn sẽ cần phải đặt giá trị trong dấu ngoặc kép. ví dụ: p: DeployIisAppPath = "Trang web mặc định / Mới"
shiitake

27

Tôi không biết TeamCity vì vậy tôi hy vọng điều này có thể làm việc cho bạn.

Cách tốt nhất mà tôi đã tìm thấy để làm điều này là với MSDeploy.exe. Đây là một phần của dự án WebDeploy do Microsoft điều hành. Bạn có thể tải về các bit ở đây .

Với WebDeploy, bạn chạy dòng lệnh

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

Điều này thực hiện tương tự như lệnh VS Publish, chỉ sao chép các bit cần thiết vào thư mục triển khai.


Điều đó có vẻ đầy hứa hẹn. Tuy nhiên, có vẻ như Dịch vụ quản lý chỉ khả dụng trên Máy chủ 2008. Máy chủ dàn của tôi (nơi tôi muốn tự động hóa triển khai) đang chạy Windows 7 Pro.
jrummell

2
Có hai mảnh cho sản phẩm. Các phần được tích hợp ngay vào IIS yêu cầu Server 2008. Thành phần dòng lệnh không có yêu cầu đó; Tôi có nó chạy trên hộp Server 2003 tôi sử dụng để triển khai.
Jeff Siver

Tôi đã đọc một số bài trên MSDeploy. Tôi đã cài đặt nó và làm việc trên máy chủ dàn của tôi, cảm ơn! Tôi có thể chạy MSDeploy từ tập lệnh MSBuild không?
jrummell

1
có giống với cấu hình của lệnh VS Publish không? Phương pháp xuất bản nào - hệ thống tập tin hay khác? Nó có sử dụng tệp MyProject.Publish.xml để xác định tệp nào cần sao chép không?
Anthony

1
Tôi chỉ cho nó một phát súng nhưng nó không làm như VS Publish. Nó đã làm giống như XCopy bao gồm tất cả các tệp nguồn.
Louis Bolog

13

Với VisualStudio 2012, có một cách để xử lý subj mà không cần xuất bản hồ sơ. Bạn có thể truyền thư mục đầu ra bằng các tham số. Nó hoạt động cả với đường dẫn tuyệt đối và tương đối trong tham số 'PublishUrl'. Bạn có thể sử dụng VS100COMNTOOLS, tuy nhiên bạn cần ghi đè VisualStudioVersion để sử dụng mục tiêu 'WebPublish' từ %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets. Với VisualStudioVersion 10.0, tập lệnh này sẽ thành công mà không có đầu ra :)

Cập nhật: Tôi đã quản lý để sử dụng phương pháp này trên máy chủ xây dựng chỉ cài đặt Windows SDK 7.1 (không có Visual Studio 2010 và 2012 trên máy). Nhưng tôi đã phải làm theo các bước sau để làm cho nó hoạt động:

  1. Tạo Windows SDK 7.1 hiện tại trên máy bằng cách sử dụng câu trả lời Simmo ( https://stackoverflow.com/a/2907056/2164198 )
  2. Đặt khóa đăng ký HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ SxS \ VS7 \ 10.0 thành "C: \ Program Files \ Microsoft Visual Studio 10.0 \" (sử dụng đường dẫn của bạn nếu phù hợp)
  3. Sao chép thư mục% ProgramFiles% \ MSBuild \ Microsoft \ VisualStudio \ v11.0 từ máy phát triển của tôi để xây dựng máy chủ

Kịch bản:

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%

Cảm ơn giải pháp này - đây là những gì tôi đang tìm kiếm: tùy chọn WebPublish với triển khai hệ thống tệp.
woohoo

12

tìm thấy hai giải pháp khác nhau hoạt động theo cách hơi khác nhau:

1. Giải pháp này được lấy cảm hứng từ câu trả lời từ alexanderb [link] . Thật không may, nó không hoạt động với chúng tôi - một số dll đã không được sao chép vào OutDir. Chúng tôi phát hiện ra rằng việc thay thế ResolveReferencesbằng Buildmục tiêu sẽ giải quyết vấn đề - bây giờ tất cả các tệp cần thiết được sao chép vào vị trí OutDir.

msbuild / target: Build; _WPPCopyWebApplication / p: Cấu hình = Phát hành; OutDir = C: \ Tmp \ myApp \ MyApp.csproj
Nhược điểm của giải pháp này là thực tế là OutDir không chỉ chứa các tệp để xuất bản.

2. Giải pháp đầu tiên hoạt động tốt nhưng không như chúng ta mong đợi. Chúng tôi muốn có chức năng xuất bản như trong Visual Studio IDE - tức là chỉ các tệp sẽ được xuất bản mới được sao chép vào thư mục đầu ra. Vì nó đã được đề cập, giải pháp đầu tiên sao chép nhiều tệp hơn vào OutDir - trang web để xuất bản sau đó được lưu trữ trong _PublishedWebsites/{ProjectName}thư mục con. Lệnh sau giải quyết điều này - chỉ các tệp để xuất bản sẽ được sao chép vào thư mục mong muốn. Vì vậy, bây giờ bạn có thư mục có thể được xuất bản trực tiếp - so với giải pháp đầu tiên, bạn sẽ tiết kiệm một số dung lượng trên ổ cứng.

msbuild / target: Build; PipelinePreDeployCopy ALLFilesToOneFolder / p: Cấu hình = Phát hành; _PackageTempDir = C: \ Tmp \ myApp \; AutoParameterizationWebConfigConnectionStrings = false MyApp.csproj
AutoParameterizationWebConfigConnectionStrings=falsetham số sẽ đảm bảo rằng các chuỗi kết nối sẽ không được xử lý như các tạo phẩm đặc biệt và sẽ được tạo chính xác - để biết thêm thông tin, xem liên kết .


Tùy chọn số 2 của bạn đã giúp tôi thoát khỏi _CopyWebApplication lỗi thời. Bạn đã cứu Build-Server của tôi sau khi nâng cấp lên VS 2015. Nghiên cứu tuyệt vời. Đánh giá cao.
it3xl

Tùy chọn # 2 của bạn là hoàn hảo cho tập lệnh xây dựng của tôi.
AnthonyVO

3

Bạn phải đặt môi trường của bạn

  • <Tên trang web>
  • <tên miền>

và tham khảo blog của tôi. (xin lỗi bài viết là tiếng Hàn)

  • 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

Đây là tập tin lô của tôi

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
Sẽ thật tuyệt nếu bạn có thể kể chi tiết câu trả lời của mình. Làm thế nào chính xác tập tin bó của bạn giải quyết vấn đề của OP? Cảm ơn!
Luís Cruz

1

đây là đợt làm việc của tôi

xuất bản-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%

Lưu ý rằng tôi đã cài đặt Visual Studio trên máy chủ để có thể chạy MsBuild.exevì các MsBuild.exethư mục .Net Framework không hoạt động.


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 ...... Nhưng vẫn chỉ nhận được DLL chứ không phải cấu trúc tệp tôi muốn. Có gì sai với nó? :(
Nishant

1

Bạn có thể Xuất bản Giải pháp với đường dẫn mong muốn bằng mã bên dưới, Ở đây PublishInDFolder là tên có đường dẫn chúng tôi cần xuất bản (chúng tôi cần tạo mã này trong ảnh bên dưới)

Bạn có thể tạo tập tin xuất bản như thế này

Thêm dưới 2 dòng mã trong tệp bó (.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

Để tạo đầu ra xuất bản cung cấp thêm một tham số. msbuild example.sln / p: Publishprofile = profilename / p: execonbuild = true / p: configure = debug / hoặc any

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.