2012-01-19 15 views
54

Mam Web.config z kilkoma connectionStringsJak usunąć ConnectionString config Transformacje

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

Czy istnieje sposób za pomocą przekształceń config aby usunąć konkretny ConnectionString? Coś jak:

<connectionStrings> 
    <xdt:Remove connStr2? 

Oczywiście nie w pobliżu poprawnej składni, ale co mi chodzi ...

Odpowiedz

54

Z MSDN documentation na temat:

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

Transform="Remove" jest magia ty szukam. Istnieje również Transform="RemoveAll", którego możesz użyć w połączeniu z konkretnymi dodatkami.

EDIT

Na drugim myśli może również być w stanie połączyć Locator attribute z Remove zdefiniowanego powyżej, aby ograniczyć elementy, które rzeczywiście chcesz usunąć.

Więcej definitywnie:

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

lub podobnego powinno działać.

+12

XPath nie będzie działać. Poprawna składnia jest wymieniona przez @ hyke20 poniżej. Aby przetestować transformację online, możesz użyć: http://webconfigtransformationtester.apphb.com/ –

+0

Dlaczego chcesz usunąć rzeczywisty obszar nazw w powyższym przykładzie? Jest to: xmlns: xdt = "http://schemas.microsoft.com/XML-Document-Transform". W pełni: [] –

+0

Czy można to zrobić dynamicznie za pomocą kodu C#? –

85

Spowoduje to usunięcie określonego ciągu połączenia na podstawie jego nazwy.

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

Należy pamiętać, że wartość connectionString nie jest pustym ciągiem, ale jest zamiast spacji. Każda niepuste wartości wystarczy.

+2

Argument "DefaultConnection-Web.config Connection String" nie może mieć wartości NULL ani być pusty. Jest to, co otrzymuję, gdy umieszczam twój kod w moim web.release.config. Jakieś pomysły? Dzięki – Leigh

+5

Dlaczego wymagany jest atrybut 'connectionString'? Nie powinno się 'xdt: Transform =" Remove "' być w stanie usunąć węzeł na podstawie tylko jego nazwy? –

+0

@DmytroShevchenko & Leigh - Nie dostaję tego błędu, kiedy używam przykładu hyke20, ale jeśli zostawiam właściwość "connectionString", otrzymam ostrzeżenie, że go brakuje. – Robotnik