2012-01-19 68 views
54

我有一個Web.config一個ConnectionString的幾個的ConnectionStrings如何刪除使用配置轉換

<connectionStrings> 
    <add name="connStr1" connectionString="... 
    <add name="ConnStr2" connectionString="... 
    <add name="connStr3" connectionString="... 

是否有使用配置轉換刪除特定的ConnectionString的方法嗎?是這樣的:

<connectionStrings> 
    <xdt:Remove connStr2? 

顯然沒有在附近的正確語法,但你讓我的漂移...

回答

54

MSDN documentation關於這個問題:

<configuration xmlns:xdt="..."> 
    <connectionStrings> 
    <add xdt:Transform="Remove" /> 
    </connectionStrings> 
</configuration> 

Transform="Remove"是你魔正在尋找。還有一個Transform="RemoveAll",您可能可以結合使用特定的添加項。

編輯

關於第二個想法,你也能夠在Locator attribute與上述定義的Remove相結合,限制哪些元素你真的想刪除。

更明確:

<configuration xmlns:xdt="..."> 
    <connectionStrings> 
    <add xdt:Transform="Remove" xdt:Locator="XPath(configuration/connectionStrings[@name='ConnStr2'])" /> 
    </connectionStrings> 
</configuration> 

或者類似的應該工作。

+12

XPath不起作用。正確的語法是@ hyke20波紋管提到的。要在線測試轉換,可以使用:http://webconfigtransformationtester.apphb.com/ –

+0

爲什麼要刪除上面示例中的實際名稱空間?它是:xmlns:xdt =「http://schemas.microsoft.com/XML-Document-Transform」。完全:[<配置xmlns:xdt =「http://schemas.microsoft.com/XML-Document-Transform」>] –

+0

有沒有辦法通過C#代碼動態地做到這一點? –

85

這將根據名稱刪除特定的連接字符串。

<configuration> 
    <connectionStrings> 
    <add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString=" " /> 
    </connectionStrings> 
</configuration> 

請注意,connectionString值不是空字符串,而是空格。任何非空值都可以。

+2

「DefaultConnection-Web.config連接字符串」參數不能爲空或空。當我把你的代碼放入我的web.release.config時,我得到了什麼。有任何想法嗎?謝謝 – Leigh

+5

爲什麼連接字符串屬性是必需的?不應該'xdt:Transform =「刪除」'只能根據名字刪除節點嗎? –

+0

@DmytroShevchenko&Leigh - 當我使用hyke20的例子時,我沒有得到這個錯誤,但是如果我放棄'connectionString'屬性,我會收到一條警告,指出它缺失。 – Robotnik

相關問題