发布ASP.NET时web.config内容的参数化
微软的MSDeploy提供了web.config transform方式,提供发布时对web.config的变换能力以应对不同模式的部署。VS2010创建ASP.NET项目的时候就默认提供了debug版和release版的web.config。详细可以参考MSDN。
而还有一些场景是也需要在部署的时候变更web.config内容,但是需要通过外部(例如安装程序)指定需要变换的参数。这就要用到了web.config的参数化。这部分内容似乎MSDN上没有详细讲(或者我没找到)。
在这里找到了一些相关的说明(请自备FQ工具)。
摘要如下:
Step 1: 创建Parameters.xml,设置希望在部署阶段变换的参数。
没找到对应的schema,手写起来有点麻烦,好歹我这一次需要参数化的内容不多。首先给出一个参考(来自上述博文)
<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 - 用正则表达式表示该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] 这里有一篇更详细的文档