18

Tôi muốn biết cách xuất bản từ PowerShell theo cách tương tự như tôi có thể từ Visual Studio.Làm thế nào để thực hiện chính xác chức năng giống như Xuất bản bên trong visual studio từ powershell

Khi bạn khởi chạy Visual Studio với dự án MVC chẳng hạn; sau đó nhấp chuột phải vào dự án và chọn "Xuất bản"; một hộp thoại xuất hiện mà bạn điền vào một vài cài đặt trong nhấp vào Xuất bản lại. Nó kỳ diệu đẩy trang web của bạn ra như mong đợi. Nó cũng tạo ra một tập tin để giữ các thiết lập đó. projectName.Publish.xml.

Tệp đó là lý do tôi muốn có thể sử dụng điều này theo cách giống hệt nhau. Có một vài cài đặt có thể thao tác trong PowerShell để đẩy ứng dụng đến nhiều trang web với các cấu hình khác nhau.

tôi đã xem xét "msbuild mục tiêu: công bố", mà chỉ sản xuất (chạy từ thư mục chứa các csproj):

MSBUILD : error MSB1009: Project file does not exist. 
Switch: target:publish 

Tôi đã cố gắng "mục tiêu msbuild projectfile: xuất bản" trong đó sản xuất:

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: target:build 

Tôi cũng đã xem xét một số biến thể msdeploy. Nó không thể là khó khăn này !? Nếu bạn có thể nhấp chuột phải vào studio thì có một thứ thực hiện nhiệm vụ đó.

Tôi bắt đầu tự hỏi nếu điều này đòi hỏi một mặt trăng đầy đủ và cắt đầu ra khỏi một con gà. (Tôi đã dành nhiều thời gian về vấn đề này!)

** EDIT: Tôi cố gắng Lee gợi ý:

msbuild target:publish Mvc.csproj 

nào tạo ra lỗi này:

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: Mvc.csproj 

For switch syntax, type "MSBuild /help" 

** EDIT: Từ DaveE của gợi ý, tôi đã cố gắng:

msbuild target:publish Mvc.csproj 

nào tạo ra lỗi này:

MSBUILD : error MSB1009: Project file does not exist. 
Switch: target:publish=PassportHealth.PatientSimple.Mvc.csproj 

Tôi cũng quay trở lại với các tài liệu cho "Publish" mục tiêu (http://msdn.microsoft.com/en-us/library/ms165431.aspx) mà dường như khá rõ ràng rằng cú pháp là:

msbuild target:publish 

Vì vậy, sau khi đọc lại điều này nhiều lần kết luận của tôi là thế này: các xuất bản mục tiêu là để triển khai một cú nhấp chuột các tệp .exe không phải là trang web MVC. Tôi đã tìm thấy http://weblogs.asp.net/scottgu/archive/2010/09/13/automating-deployment-with-microsoft-web-deploy.aspx nói về vấn đề này khá rõ ràng. Tuy nhiên, tôi không thấy cách sử dụng tệp "publishing.xml" trong điều này thông qua lệnh msdeploy.

+3

tùy chọn dòng lệnh trong msbuild được chỉ định bằng/opt: giá trị như vậy để gọi xuất bản nhắm mục tiêu bạn nên sử dụng 'msbuild/t: Xuất bản proj_file.csproj'. – Lee

+0

Đây là liên kết đến tổng quan MSDN MSDN (VS2008): http://msdn.microsoft.com/en-us/library/ms171452.aspx – DaveE

Trả lời

20

Tệp projectName.publish.xml chỉ được sử dụng thông qua Visual Studio để xuất bản One-Click. Đối với MSBuild, bạn cần truyền một loạt các tham số trực tiếp trên dòng lệnh (/ p: Param1 = value1; Param2 = value2; ...). Ví dụ:

/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=InProc /p:MSDeployServiceUrl=localhost /p:DeployIisAppPath="Default Web Site/NewOrleansJazz" /p:UserName=domain\user /p:Password=myPassword (source)

Lưu ý rằng trong Preview VS11 (phát hành tại hội nghị BUILD), có một tập tin mới thay thế projectName.publish.xml: MyPublishSettings.pubxml. Tệp này về cơ bản là sự kết hợp của tệp publish.xml và projectName.wpp.targets được cuộn thành một (cũng được chia nhỏ cho mỗi cấu hình thay vì lưu tất cả chúng vào tệp publishing.xml, ví dụ: TestSettings.pubxml, ProductionSettings.pubxml), và có thể được sử dụng từ dòng lệnh một cách đơn giản bằng msbuild MyProject.csproj /t:WebPublish /p:PublishProfile="myProfile"

[sửa:] một vài ghi chú lại: các thông tin trong bài viết của bạn:

  1. Các lỗi về chỉ xác định một dự án duy nhất có lẽ là do xác định mục tiêu không chính xác. Khác với tên dự án, tất cả các thông số được chuyển đến msbuild bắt đầu bằng một số /, ví dụ: /t[arget]:foo /p[roperty]:var=value
  2. Mục tiêu xuất bản thực sự không liên quan đến Xuất bản web. IIRC, nó liên quan đến việc xuất bản một ứng dụng OneClick. Trong VS2010, bạn nên sử dụng /t:build /p:DeployOnBuild=true cho các dự án Web để sử dụng các tác vụ xuất bản (như đã sử dụng ở trên). Mới trong VS11 là /t:WebPublish cũng cần một bộ thông số đơn giản hơn, cụ thể là tệp .pubxml bạn muốn sử dụng.
    • lưu ý bổ sung: khi tạo tệp giải pháp, /t:WebPublish sẽ không thành công vì mục tiêu không được xác định ở cấp giải pháp. Nó chỉ có thể được sử dụng trực tiếp trên tệp dự án cho dự án Web của bạn. Bạn vẫn có thể sử dụng /p:DeployOnBuild=true ở cấp độ giải pháp vì giá trị tham số được truyền cho từng dự án đang được xây dựng, nhưng sẽ bị bỏ qua bởi bất kỳ dự án nào không tiêu tốn giá trị đó.
+0

Cảm ơn câu trả lời !! Tôi đã tìm ra cách làm việc xung quanh nó bằng cách sử dụng lệnh autogenerated được tạo trong mục tiêu 'Gói'. Đó là tuyệt vời về những thứ VS2011. Tôi đã tự hỏi tại sao cấu hình của tôi xây dựng chịu trách nhiệm cho các biến đổi web.config mà dường như tôi có liên quan nhiều hơn đến việc triển khai/xuất bản môi trường. – Mike

+0

Tôi vừa thử điều này ngày hôm nay và nó gần như đã hoạt động. Tôi đã phải thay đổi 'MSDeployPublishMethod = WMSVC'. Tôi cũng phải thêm 'AllowUntrustedCertificate = True' vì nó là một máy chủ nội bộ. HTH –