2012-01-19 18 views
54

Ho un web.config con diversi ConnectionStringsCome rimuovere un ConnectionString utilizzando Config Trasformazioni

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

Esiste un modo utilizzando le trasformazioni di configurazione per rimuovere un connectionstring specifico? Qualcosa di simile:

<connectionStrings> 
    <xdt:Remove connStr2? 

Ovviamente non vicino a dove la sintassi corretta, ma si ottiene la mia deriva ...

risposta

54

Dal MSDN documentation sul tema:

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

Il Transform="Remove" è la magia che si stai cercando. C'è anche un Transform="RemoveAll" che potresti essere in grado di usare in concomitanza con uno specifico add (s).

EDIT

A pensarci bene si può anche essere in grado di combinare la Locator attribute con l'Remove sopra definito per limitare gli elementi che realmente desidera eliminare.

Più definitivamente:

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

o simile dovrebbe funzionare.

+12

XPath non funzionerà. La sintassi corretta è quella menzionata da @ hyke20 qui sotto. Per testare la trasformazione online è possibile utilizzare: http://webconfigtransformationtester.apphb.com/ –

+0

Perché dovresti rimuovere lo spazio dei nomi effettivo nell'esempio sopra? È: xmlns: xdt = "http://schemas.microsoft.com/XML-Document-Transform". Completamente: [] –

+0

C'è un modo per farlo dinamicamente tramite codice C#? –

85

Ciò rimuoverà una stringa di connessione specifica in base al suo nome.

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

noti che il valore connectionString non è stringa vuota, ma è invece uno spazio. Qualsiasi valore non vuoto dovrebbe fare.

+2

L'argomento 'DefaultConnection-Web.config Connection String' non può essere nullo o vuoto. È quello che ottengo quando inserisco il codice nel mio web.release.config. Qualche idea? Grazie – Leigh

+5

Perché è richiesto l'attributo 'connectionString'? Non dovrebbe 'xdt: Transform =" Rimuovi "' essere in grado di rimuovere il nodo solo in base al suo nome? –

+0

@DmytroShevchenko & Leigh - Non ottengo quell'errore quando uso l'esempio di hyke20, ma se lascio la proprietà 'connectionString' ottengo un avviso che manca. – Robotnik

Problemi correlati