使用web.config转换有条件地更新元素

时间:2012-05-29 15:01:11

标签: web-config transformation

我正在尝试为web.config配置转换规则以创建或更新连接字符串。规则很简单:

  1. 如果存在具有给定名称(“MyDatabase”)的连接字符串,则不应触及该字符串。

  2. 如果没有具有给定名称的连接字符串,则应插入该字符串。

  3. 但我无法弄清楚这是否可行。如果我只是在web.config.transform中指定“add”元素,它会插入connectionString元素,即使已经存在具有此类名称的元素。但是如果我指定xdt:Transform =“Replace”,那么它将被替换。我在主题上找到了good article,并列出了替换,插入,删除方案。但我需要“InsertIfNotExists”。

    非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

博客Custom web.config transforms and merges描述 扩展Merge和MergeBefore转换会在元素丢失的情况下插入元素,但如果元素已经存在则保留元素。

要使用自定义转换,您必须在转换XML中导入相关的命名空间:

<xdt:Import assembly="AppHarbor.TransformTester"
    namespace="AppHarbor.TransformTester.Transforms"/>

答案 1 :(得分:0)

另一种解决方案,如果您希望通过配置转换更新web.config中的元素并且该元素不存在,您只需在web.config中添加一个空元素并配置您的web.Release.config就像这样:

的web.config:

<system.web>
<httpModules>
</httpModules>
...

web.Release.config:

<system.web>
<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" xdt:Transform="Insert" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" xdt:Transform="Insert" />
</httpModules>
...

这样,您可以在部署时将新属性合并到Web配置中!