我正在尝试为web.config配置转换规则以创建或更新连接字符串。规则很简单:
如果存在具有给定名称(“MyDatabase”)的连接字符串,则不应触及该字符串。
如果没有具有给定名称的连接字符串,则应插入该字符串。
但我无法弄清楚这是否可行。如果我只是在web.config.transform中指定“add”元素,它会插入connectionString元素,即使已经存在具有此类名称的元素。但是如果我指定xdt:Transform =“Replace”,那么它将被替换。我在主题上找到了good article,并列出了替换,插入,删除方案。但我需要“InsertIfNotExists”。
非常感谢帮助。
答案 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配置中!