2012-05-29 41 views
4

我正在嘗試爲web.config配置轉換規則以創建或更新連接字符串。規則很簡單:使用web.config轉換來有條件地更新元素

  1. 如果存在具有給定名稱(「MyDatabase」)的連接字符串,則不應觸摸它。

  2. 如果沒有給定名稱的連接字符串,應該插入它。

但我不明白這是否可能。如果我只是在我的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"/> 
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配置!