45

Folks,VS2010 Web Xuất bản phiên bản dòng lệnh của File System triển khai

Tóm lại, tôi muốn tái tạo hộp thoại này: alt text

Đó là một Visual Studio 2010 dự án ASP.Net MVC. Nếu tôi thực hiện lệnh này, tôi nhận tất cả các tệp tôi muốn, bao gồm cả web.configs đã được chuyển đổi trong thư mục "C: \ ToDeploy".

Tôi muốn sao chép điều này trên dòng lệnh để tôi có thể sử dụng nó để xây dựng môi trường QA.

Tôi đã xem các bài viết khác nhau về cách thực hiện điều này trên dòng lệnh dành cho Triển khai từ xa, nhưng tôi chỉ muốn làm điều đó cho Hệ thống tệp triển khai.

Tôi biết tôi có thể sao chép chức năng này bằng cách sử dụng các tác vụ hoặc kịch bản lệnh cấm, nhưng tôi muốn thực hiện bằng cách sử dụng cơ chế này để tôi không lặp lại bản thân mình.

Tôi đã điều tra này một số chi tiết, và tôi đã tìm thấy những liên kết này, nhưng không ai trong số họ giải quyết nó sạch:

Cảm ơn trước!

Trả lời

46

Ok, cuối cùng đã tìm ra điều này.

Các dòng lệnh bạn cần là:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False 

Bạn có thể thay đổi nơi các đầu ra dự án bằng cách thêm một tài sản của outdir=c:\wherever\ trong thư mục/p: phần.

này sẽ tạo đầu ra tại địa chỉ:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/ 

Sau đó bạn có thể sao chép các tập tin từ thư mục trên sử dụng bất cứ phương pháp nào bạn muốn.

Tôi đã thực hiện tất cả thao tác này dưới dạng tác vụ cào ruby ​​sử dụng Albacore. Tôi đang cố gắng làm cho nó được thực hiện tất cả vì vậy tôi thực sự có thể đặt nó như là một đóng góp cho dự án. Nhưng nếu ai đó muốn mã trước đó, hãy cho tôi biết.

Một nếp nhăn khác mà tôi tìm thấy là nó đã được đưa vào thông số Tokenized vào Web.config. Nếu bạn không cần tính năng đó, hãy đảm bảo bạn thêm:

/p:AutoParameterizationWebConfigConnectionStrings=false 
+0

Thật không may, điều này sẽ sao chép toàn bộ gói. Tôi nghĩ bạn sẽ cần phải sử dụng MS Web Deploy để chỉ sao chép các tệp đã thay đổi. – jrummell

+5

Để hoàn thành, thuộc tính OutDir phải kết thúc bằng dấu gạch chéo (lỗi MSBuild nếu không). Vì vậy, đề xuất của bạn nên là 'outdir = c: \ anywhere \'. –

+0

Ngoài ra, thay vì '/ p: DeployOnBuild = True' bạn chỉ có thể sử dụng mục tiêu Gói:'/t: Gói'. Làm việc cho tôi, cộng với cả tham số 'PackageAsSingleFile' và' AutoParameterizationWebConfigConnectionStrings' đều được tôn trọng. –

11

Tôi nghĩ tôi đã đăng một giải pháp khác mà tôi tìm thấy, tôi đã cập nhật giải pháp này để bao gồm tệp nhật ký.

Điều này tương tự như Publish a Web Application from the Command Line, nhưng chỉ cần dọn dẹp và thêm tệp nhật ký. cũng kiểm tra nguồn gốc http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Tạo MSBuild_publish_site.dơi (tên nó bất cứ điều gì) trong thư mục gốc của dự án ứng dụng web của bạn

set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319 
set destPath=C:\Publish\MyWebBasedApp\ 

:: clear existing publish folder 
RD /S /Q "%destPath%" 

call %msBuildDir%\msbuild.exe MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log 

set msBuildDir= 
set destPath= 

Cập nhật ứng dụng Web của bạn tập tin dự án MyWebBasedApp.csproj bằng cách thêm xml sau dưới <Import Project= thẻ

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> 
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> 

    <ItemGroup> 
     <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> 
</Target> 

này hoạt động tốt hơn cho tôi so với các giải pháp khác.

Check-out sau để biết thêm:

1) http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

2) Publish a Web Application from the Command Line

3) Build Visual Studio project through the command line

+2

Điều này hoạt động thực sự tốt – Dann

-1

Một tập tin msbuild hoàn chỉnh với cảm hứng từ CubanX

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Publish"> 
     <RemoveDir Directories="..\build\Release\Web\" 
        ContinueOnError="true" />   
     <MSBuild Projects="TheWebSite.csproj" 
       Targets="ResolveReferences;_CopyWebApplication" 
       Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\" 
     /> 
    </Target> 
    <Target 
     Name="Build" 
     DependsOnTargets="Publish;"> 
    </Target> 
</Project> 

Điều này đặt các trang web công bố trên Web .. \ build \ phát hành thư mục

0

Tôi đã có một giải pháp cho Visual Studio 2012: https://stackoverflow.com/a/15387814/2164198

Tuy nhiên, nó hoạt động không có Visual Studio lắp đặt tại tất cả! (xem CẬP NHẬT). Tôi chưa kiểm tra xem liệu người ta có thể nhận được tất cả những thứ cần thiết từ Visual Studio Express 2012 để cài đặt Web hay không.

1

Giải pháp của tôi cho CCNET với việc chuyển đổi Web.config:

<tasks> 
    <msbuild> 
     <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> 
     <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory> 
     <projectFile>GertakariakMSWeb2.vbproj</projectFile> 
     <targets>Build</targets> 
     <timeout>600</timeout> 
     <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> 
     <buildArgs> 
      /noconsolelogger /p:Configuration=Release /v:diag 
      /p:DeployOnBuild=true 
      /p:AutoParameterizationWebConfigConnectionStrings=false 
      /p:DeployTarget=Package 
      /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web 
     </buildArgs> 
     </msbuild> 
</tasks> 
1

Mở VS2012 trở lên, bạn có thể tham khảo publish profiles on your project hiện với msbuild 12.0, đây sẽ là tương đương với nhấp chuột phải và xuất bản ... chọn tiểu sử xuất bản ("MyProfile" trong ví dụ này):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile" 
Các vấn đề liên quan