微軟的MSDeploy提供了web.config transform方式,提供發布時對web.config的變換能力以應對不同模式的部署。VS2010建立ASP.NET項目的時候就預設提供了debug版和release版的web.config。詳細可以參考MSDN。
而還有一些情境是也需要在部署的時候變更web.config內容,但是需要通過外部(例如安裝程式)指定需要變換的參數。這就要用到了web.config的參數化。這部分內容似乎MSDN上沒有詳細講(或者我沒找到)。
在這裡找到了一些相關的說明(請自備翻牆工具)。
摘要如下:
Step 1: 建立Parameters.xml,設定希望在部署階段變換的參數。
沒找到對應的schema,手寫起來有點麻煩,好歹我這一次需要參數化的內容不多。首先給出一個參考(來自上述博文)
代碼<?xml version="1.0" encoding="utf-8" ?>
<parameters >
<parameter name="Log Folder Location" description="Please provide a shared location where the app can write log files to" defaultValue="\\Logs\MvcApp\Logs\" tags="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/appSettings/add[@key='LogFolder']/@value" />
</parameter>
<parameter name="WCF Service1 Endpoint Address" description="Please provide the Endpoint address for Service1 that this MVC App needs to call" defaultValue="http://localhost:61938/Service1.svc" tags="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="//system.serviceModel/client/endpoint/@address" />
</parameter>
</parameters>
對parameter的各個attribute做一下說明(意譯自上述博文)
name - 必須屬性,不可重複。
description - 在使用IIS Manager部署時會出現在UI
defaultValue - 非必須
scope - 用Regex表示該parameter對應什麼地方
kind - 有很多種,但只需記住兩種
XMLFile - 使用XPath對web.config或者其他xml檔案進行變換
TextFile - 對非XML檔案,可以進行尋找替換。例如,可以定義@@replacementme@@以便在部署時替換
match - 取決於kind,如果kind=XMLFile,那麼match就被定義成一個XPath,如果是TextFile,那麼match就是你預定義在被變換檔案中的一些短語例如@@replacementme@@
Step 2:打包
Step 3:使用IIS Manager或者命令列方式部署,這就不是本文要討論的內容了。
[Update] 這裡有一篇更詳細的文檔