现在的位置: 首页 > 综合 > 正文

发布ASP.NET时web.config内容的参数化

2012年07月26日 ⁄ 综合 ⁄ 共 1561字 ⁄ 字号 评论关闭

微软的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 - 用正则表达式表示该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] 这里有一篇更详细的文档

抱歉!评论已关闭.