﻿# 如何使用 Visual Studio 2010 的「單鍵發行」功能 (MsDeploy)

以往在部署網站的時候都有許多手動的步驟需介入，對於許多對 IIS / SQL 不太熟悉的新手來說部署網站變成一件非常困難且危險的事。這次 Visual Studio 2010 對於 ASP.NET 網站部署的能力大大的提升，它透過 Web Deploy API 直接與 IIS 溝通，可在發行的同時除了將網站安裝進 IIS 之外，還可以設定目錄權限、變更 web.config 內容、建立應用程式、應用程式集區、IIS 細部設定、安裝組件進 GAC、安裝憑證、設定機碼、建立資料庫、…. 等，非常強大的部署機制且與 IIS7 完美整合。

*備註：我指的**危險**是指**資安方面的風險**，因為設定不成功就會開始亂設權限，例如：將目錄設定成 Everyone 可讀寫 等等。*

Visual Studio 2010 更提供了 \[ **Web 單鍵發行** \] 工具列，在設定好「發行設定檔」之後就可以真的用「單鍵」將網站安裝或更新完成，非常的神奇且好用，以下就是使用的方式。

要使用 Visual Studio 2010 **Web 單鍵發行**功能，必須先在 IIS 所在主機安裝 [Web Deployment Tool](http://www.iis.net/expand/WebDeploymentTool)，然後在進一步設定才能透過 **Microsoft Web Deployment Tool (MsDeploy)** 發行/部署網站。

若要透過 **IIS 管理服務** ( **IIS Web Management Service** ) (**WMSvc**) 部署至本機 IIS7，則還必須先安裝「**IIS 管理服務**」才能使用。

Windows 7 需透過 \[ **開啟或關閉 Windows 功能** \] 安裝「**IIS 管理服務**」

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c22792e22bd7f0585656-image.png)

Windows Server 2008 需透過 \[ **網頁伺服器(IIS)** \] 安裝「**管理服務**」這個角色服務

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a01bd6215179fa007c9a-image.png)

若要啟用「遠端部署」則還必須啟用 **Web Deployment Agent Service** 服務才能正常運作。

**IIS7**

若在 Windows 7 使用 Web Platform Installer 預設不會安裝 Web Deployment Agent Service，你必須手動安裝 MSI 檔的方式才會安裝進去，安裝步驟請參見 [Installing Web Deploy](https://learn.microsoft.com/en-us/iis/install/installing-publishing-technologies/installing-and-configuring-web-deploy) 說明。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/713f488486f03371ab04-image.png)

**IIS6**

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5b167c4361bc88dc4e6c-image.png)

接著我們來到 Visual Studio 2010 設定 \[ **Web 發行** \] 的「**發行設定檔**」( 記得先開啟網站專案才能用 )

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3f2e64113058c4dc2fb7-image.png)

如果沒看見 \[ **Web 單鍵發行** \] 工具列，可以在工具列的地方按下滑鼠右鍵選取 \[**Web 單鍵發行**\] 即可：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7feb564658a283495eae-image.png)

先設定一組發行的名稱

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2347ef7c557a44367dfa-image.png)

設定以下參數並按下 \[**儲存**\] 或 \[**發行**\] 按鈕：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0cbb0761b831a11e2fef-image.png)

以上參數分項說明如下：

**1\. 發行方法**：選擇 Web 部署

**2\. 服務 URL**：這裡的服務 URL 有 3 種格式：

-   輸入 IP 或 網址，例如：localhost 或 192.168.2.116
    -   遠端部署時，網址會自動展開成 https://192.168.2.116:8172/msdeploy.axd?site=站台名稱
    -   這種格式一定會要求使用 SSL 連線，如果沒有安裝 SSL 憑證的 IIS 將無法成功安裝
    -   這種網址格式預設會透過 **The Web Management Service (WMSvc) Handler** 進行部署
    -   僅 Windows Server 2008 上的 IIS7 才提供此功能
-   輸入 URL 網址，例如：http://localhost 或 http://stage.example.com
    -   遠端部署時，網址會自動展開成 http://stage.example.com/MSDEPLOYAGENTSERVICE/
    -   這種網址格式預設會透過 **Web Deployment Agent Service** 進行部署
-   輸入完整 URL 網址，例如：http://localhost/MsDeploy.axd

若要發行至本機，上述三種任何一種都可以，只要網址是 localhost 即可。

**3\. 網站/應用程式**：這裡有特定格式：

-   在第一個斜線 ( / ) 之前代表的是 **站台名稱**，其 **站台名稱** 必須已經存在 IIS 中才能安裝
-   後面就是站台下的**虛擬目錄或應用程式路徑**，而 **虛擬目錄或應用程式路徑** 不一定要輸入。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/33c7daf14ffd7dd47b00-image.png)

**4\. 網站/應用程式：**若要將安裝的網站需要轉換成「應用程式」則必須要勾選此選項。

\---

發佈成功後，下次要再發佈網站就可以使用「單鍵發行」的功能了：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/57db41b00b5627f34eaa-image.png)

當你第一次發行過後，你將會發現之後的發行速度都會飛快，那是因為他只會發行更新過的檔案，非常棒吧！若要多瞭解 [Web Deployment Tool](http://www.iis.net/expand/WebDeploymentTool) 可以參考以下相關連結或[我之前發表過的文章](/post/2009/11/23/Useful-tool-Web-Deployment-Tool)。

**備註事項**

-   雖然 [Web Deployment Tool](http://www.iis.net/expand/WebDeploymentTool) 有支援 IIS6 遠端部署，可是部署時的檢查項目並沒有比 IIS7 來的多，經測試，如果你的 ASP.NET 4.0 網站要部署時，若網站發行到 IIS7 時會檢查目的站台的應用程式集區是否使用 .NET Framework 4 版本，如果不是則會發行失敗；若網站發行到 IIS6 時則不會做這個檢查，網站應用程式會安裝完成，但可能會因為沒有正確設定應用程式集區或沒有安裝 .NET Framework 4.0 而無法執行。
-   若要在 Windows Server 2008 上的 IIS7 啟用「管理服務」的遠端連線可參考以下圖示：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0a1b76b677e576cd2873-image.png)  
      
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/bdfdfd7414dd04b69075-image.png)
-   在設定「管理服務」的時候必須先暫時停用 **Web Management Service** 服務才能變更設定  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c221a28d35e876737e8b-image.png)
-   若要透過「管理服務」進行**遠端部署**時，若遠端主機 IIS 上的憑證是使用「自我簽署憑證」的，那可能必須勾選「允許未受信任的憑證」選項才能成功部署。  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ff6605c064561260c2f5-image.png)  
      
    如果沒有勾選可能會出現以下錯誤：

```
無法完成對遠端代理程式 URL 'https://stage.example.com:8172/msdeploy.axd?site=TEST' 的要求。基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。根據驗證程序，遠端憑證是無效的。無法部署發行。
```

**相關連結**

-   [Web Deploy Team Blog : The Official Microsoft IIS Site](http://blogs.iis.net/msdeploy/)
-   [ASP.NET Web Application Project Deployment Overview](http://msdn.microsoft.com/en-us/library/dd394698.aspx)
-   [ASP.NET Web Site Projects Deployment Overview](http://msdn.microsoft.com/en-us/library/377y0s6t.aspx)
-   [Walkthrough: Deploying a Web Application Project Using One-Click Publish](http://msdn.microsoft.com/en-us/library/dd984948.aspx)
-   [Using Web Deploy Remotely](http://technet.microsoft.com/en-us/library/ee461175\(WS.10\).aspx)
-   [Installing Web Deploy](https://learn.microsoft.com/en-us/iis/install/installing-publishing-technologies/installing-and-configuring-web-deploy) ( IIS.net )
-   Don’t Install Web Deployment Tool using the Web Platform Installer
-   [Configure the Web Deployment Handler](https://learn.microsoft.com/en-us/iis/publish/using-web-deploy/configure-the-web-deployment-handler) ( IIS.net )
-   [Configuring the Web Deployment Handler](http://technet.microsoft.com/en-us/library/dd722796\(WS.10\).aspx) ( MSDN )
