如何使用配置转换删除ConnectionString


76

我有一个带有几个ConnectionStrings的Web.config

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

有没有一种方法可以使用config转换来删除特定的连接字符串?就像是:

<connectionStrings>
    <xdt:Remove connStr2?

显然没有正确语法的地方,但是你让我感到困惑...

Answers:


81

从有关该主题的MSDN文档中

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

Transform="Remove"是您要找的魔术。Transform="RemoveAll"您还可以将其与特定的add(s)结合使用。

编辑

再三考虑,您也许还可以将Locator属性Remove上面定义的内容结合起来,以限制实际上要删除的元素。

更确切地说:

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

或类似应该工作。


17
XPath无法正常工作。正确的语法是@ hyke20 bellow提到的语法。要在线测试转换,您可以使用:webconfigtransformationtester.apphb.com
Leniel Maccaferri

为什么要删除上面示例中的实际名称空间?它是:xmlns:xdt =“ schemas.microsoft.com/XML-Document-Transform ”。完全:[<configuration xmlns:xdt =“ schemas.microsoft.com/XML-Document-Transform”>]
Nicholas Petersen,

@AlexanderRyanBaggett这样做限制了代码的环境可移植性,这是使用配置转换开始的原因。也许有办法做到,但是我建议问一个新问题。
巴比科克(M.Babcock)'17年

115

这将根据其名称删除特定的连接字符串。

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

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


2
“ DefaultConnection-Web.config连接字符串”参数不能为null或为空。当我将您的代码放在web.release.config中时,我得到的是。有任何想法吗?谢谢
Leigh 2013年

8
为什么根本connectionString需要该属性?不能xdt:Transform="Remove"仅根据名称删除节点吗?
Dmytro Shevchenko

@DmytroShevchenko&Leigh-当我使用hyke20的示例时,我没有得到该错误,但是如果我放弃'connectionString'属性,则会收到警告,提示它丢失。
Robotnik

如果该属性不存在,您可能会收到警告,但该转换仍应正确应用。我个人connectionString="any"过去很清楚,我不知道转换并不关心连接字符串的值是多少。
乔什·古斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.