The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 MSDeploy 手動部署網站時如何避免 Web.config 被更新

使用 Web Deployment Tools 工具 ( 又稱 Web Deploy 或 MS Deploy ) 進行網站部署是在簡單不過的事,有興趣的人可以參考 介紹好用工具:Web Deployment Tool 1.0 ( 附心得筆記 ) 文章或 ASP.NET MVC 2 開發實戰 書籍【第11章 安裝部署】的說明,不過若更新網站時希望可以跳過更新一些重要檔案,例如 :Web.config 等,這時就必須加上特別的參數才行,這參數非常特別必須另做筆記才不會忘記。

這篇文章我們以 Visual Studio 2010 的「建置部署套件」功能來解說整個手動部署網站的步驟如下:

1. 先查看 封裝/發行設定 的設定值

alt

2. 由下圖得知「要建立封裝的位置」會在專案的 obj\Debug\Package\ 目錄下,並會產生 MyWeb.zip 檔

alt 

3. 接著我們直接建置部署套件產生封裝檔

alt 

建置完成後可以在 obj\Debug\Package\ 目錄下找到一堆檔案,你可以將如下圖紅線框起來的地方複製到要部署的正式主機上:

alt

4. 在要部署的主機上先確認 IIS 的站台是否已經建立(我們以 IIS6 為例),站台名稱必須與上述第2個步驟所示的 要在目的伺服器上使用的 IIS 網站/應用程式名稱 欄位所填的資料一樣才行!

alt

5. 我們進入命令提示字元進行手動安裝,直接用 Visual Studio 2010 幫我們建立的指令檔 ( MyWeb.deploy.cmd ) 代入參數 /Y 即可將網站安裝完成!

MyWeb.deploy.cmd /Y

alt

 

第一次安裝完之後,我們通常會手動修改 Web.config 的參數以符合正式機上的環境要求,不過修改過之後若要再次更新網站,其重要的 Web.config 就很有可能會被重新封裝過的檔案覆蓋掉。

例如我先修改已安裝部署好的主機上的 Web.config 檔案內容後,再次執行上述指定重新安裝網站一次,你會看到我們的 Web.config 檔案被更新了,也因此之前做過的變更也都會全部消失。

alt

 

解決這個方法有兩種方式,一種是用 Visual Studio 2010 內建的 Web.config Transformation 功能,我認為這個方式是比較好的方式,不過並不見得每個人都會想這樣管理設定檔,畢竟有些時候開發人員管不到正式機上面的檔案,這是負責部署的 IT 人員就必須學會第二種方法。

另一個方法就是在執行指令檔時額外加上 MSDeploy 可接受的參數 –skip 以跳過相關檔案的更新部署!

要加上參數如下範例所示:(注意:absolutePath 的參數值為 Regex 樣式比對的 Pattern 喔!)

MyWeb.deploy.cmd /Y "-skip:objectName=filePath,absolutePath=Web\.config"

執行完後你就會發現,就算正式機上的 Web.config 與封裝套件上的 Web.config 不一致也不會被覆蓋過去了,執行的畫面圖示如下:

alt

如此一來,你就可以在正式機安心的部署網站了!

補充說明

如果想先測試 MSDeploy 在安裝時到底會更新哪些檔案,可以加上 -whatif 參數進行測試,加上此參數會將整個部署過程跑一遍,但不會真的將目的地的檔案進行新增、更新或刪除等動作,你可以藉此先確認過再正式更新檔案!如下指令範例:

MyWeb.deploy.cmd /Y -whatif

相關連結