2014-07-18 28 views
2

我使用MSDeploy.exe發表我的webapp:我們怎樣在VisualStudio中使用的相同的發佈命令發佈

msdeploy.exe 
-verb:sync 
-source:package=mypackage.zip 
-dest:auto,computerName=MyServer 
-allowUntrusted 

這將我的包同步到目標服務器,並在刪除所有不必要的文件處理。 有時資源(例如:MyResource.dll)通過IIS工作進程鎖定,它不會允許刪除操作,從而部署失敗,錯誤:

Access to the path "C:\MyResource.dll" is denied.

不過,如果我使用VisualStudio的內發佈功能,我的網站發佈到服務器沒有任何問題。鎖定的文件保留在文件夾中,錯誤被忽略。

我想通VS可能使用此開關:

-enableRule:DoNotDeleteRule

但我不是很肯定。

我的問題: -

  1. 我們可以得到通過輸出窗口使用VS發佈命令或日誌文件?
  2. 有沒有辦法在遠程服務器上停止應用程序池? (這將有助於釋放鎖定的資源) * IISRESET不適合,因爲我不想讓所有網站都只是部署一個Web應用程序。

我也試過PSEXEC

psexec.exe -s \\MyServer appcmd.exe stop apppool /apppool.name=MyAppPool

它運行在命令行罰款,但是當我把它放在腳本構建的自動化,它返回的錯誤:

The handle is invalid. 
Couldn't access MyServer. 

(將我的頭撞在牆上)

回答

3

回答我的問題:

1),我們可以打通的輸出窗口使用VS發佈命令或日誌文件?

是的,我們可以輸出命令輸出窗口。
您只需將名爲<YourProjectName>.wpp.targets的文件添加到項目目錄的根目錄即可。並編輯如下內容:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <UseMsdeployExe>true</UseMsdeployExe> 
    </PropertyGroup> 
</Project> 

現在,你可以發佈使用Visual Studio和MSDeploy命令可以在輸出窗口中看到。

結賬說易卜拉欣Hashimi博客here欲瞭解更多信息。


2)有沒有辦法在遠程服務器上停止應用程序池?

我設法使用MSDeploy命令的-preSync -postSync啓動/停止/回收遠程AppPool。

MSDeploy.exe 
-source:package="mypackage.zip" 
-dest:auto,ComputerName=MyServer,IncludeAcls=False 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-allowUntrusted 
-preSync:runCommand="C:\Windows\System32\inetsrv\appcmd stop apppool <AppPoolName>" 
-postSync:runCommand="C:\Windows\System32\inetsrv\appcmd start apppool <AppPoolName>" 

希望這有助於=)

1

2)使用appoffline規則在部署過程中停止您的應用程序:

msdeploy.exe -verb:sync -source:package=mypackage.zip -dest:auto,computername=<publishUrl> -enableRule:AppOffline 

這將使app_offline.htm到你的Web應用程序根目錄的同步操作的領帶(這迫使IIS卸載應用程序,只有所有的請求,直到該文件被刪除服務於這個靜態文件 - 在這裏是一個很好的解釋http://weblogs.asp.net/scottgu/426755

查看http://www.iis.net/learn/publish/deploying-application-packages/taking-an-application-offline-before-publishing和詳情。 如果需要,您可以使用更靈活的方法(例如,在運行包的同步之前,使用單獨的webdeploy命令複製app_offline.htm)。

1)你有沒有嘗試過設置msbuild詳細診斷?

+2

我已經試過了appoffline方法,它推翻了網站,但沒有回收池。資源仍然鎖定,直到我執行手動回收apppool。 – Kagawa