Як видалити ConnectionString за допомогою перетворень Config


76

У мене є Web.config з декількома ConnectionStrings

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

Чи є спосіб за допомогою перетворень конфігурації видалити певний рядок підключення? Щось на зразок:

<connectionStrings>
    <xdt:Remove connStr2?

Очевидно, що десь поруч із правильним синтаксисом, але ви розумієте мене ...

Відповіді:


81

З документації MSDN на цю тему:

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

Це Transform="Remove"магія, яку ти шукаєш. Є також такий, Transform="RemoveAll"який ви могли б використовувати разом із певними додатками.

РЕДАГУВАТИ

Подумавши, ви також зможете поєднати Locatorатрибут із Removeвизначеним вище, щоб обмежити, які елементи ви насправді хочете видалити.

Точніше:

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

Або подібне повинно працювати.


17
XPath не працюватиме. Правильний синтаксис - це той, про який згадує @ hyke20 нижче. Щоб перевірити перетворення в Інтернеті ви можете використовувати: webconfigtransformationtester.apphb.com
Leniel Маккаферрі

Чому б вам видалити фактичний простір імен у зразку вище? Це: xmlns: xdt = " schemas.microsoft.com/XML-Document-Transform ". Повністю: [<<configuration xmlns: xdt = " schemas.microsoft.com/XML-Document-Transform">]
Ніколас Петерсен

@AlexanderRyanBaggett Це обмежує переносимість середовища коду, що є причиною того, що для початку використовуються конфігураційні перетворення. Можливо, є спосіб це зробити, але я пропоную задати нове запитання.
M.Babcock,

116

Це видалить певний рядок підключення на основі його імені.

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

Зверніть увагу, що connectionStringзначення не є порожнім рядком, а натомість є пробілом. Будь-яке непорожнє значення підійде.


2
Аргумент 'DefaultConnection-Web.config рядок підключення' не може бути нульовим або порожнім. Це те, що я отримую, коли розміщую ваш код всередині мого web.release.config. Будь-які ідеї? Подяка
Лі

8
Чому взагалі connectionStringпотрібен атрибут? Не xdt:Transform="Remove"вдалося видалити вузол лише на основі його імені?
Дмитро Шевченко

@DmytroShevchenko & Leigh - Я не отримую цієї помилки, коли використовую приклад hyke20, але якщо залишити властивість 'connectionString', я отримую попередження про те, що воно відсутнє.
Роботник

Ви можете отримати попередження, якщо атрибут відсутній, але перетворення все одно має застосовуватися правильно. Я особисто connectionString="any"буду зрозумілим для майбутнього, що перетворення не має значення, яке значення має рядок підключення.
Джош Густ,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.