4

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

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

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

但我不知道这是否可能。如果我只是在 web.config.transform 中指定“add”元素,它会插入 connectionString 元素,即使已经有一个具有这样名称的元素。但是如果我指定 xdt:Transform="Replace",那么它将被替换。我找到了一篇关于这个主题的好文章,它列出了替换、插入、删除的场景。但我需要“InsertIfNotExists”。

帮助表示赞赏。

4

2 回答 2

3

博客Custom web.config transforms and merges 描述了扩展 Merge 和 MergeBefore 转换,如果元素丢失,将插入该元素,但如果元素已经存在,则将其单独保留。

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

<xdt:Import assembly="AppHarbor.TransformTester"
    namespace="AppHarbor.TransformTester.Transforms"/>
于 2012-08-05T12:37:01.897 回答
0

另一种解决方案,如果您希望通过配置转换更新 web.config 中的元素并且该元素不存在,您可以简单地在 web.config 中添加一个空元素并配置您的 web.Release.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 配置中!

于 2017-01-10T18:48:16.093 回答