如何使用配置转换删除ConnectionString

Did*_*xis 65 .net c# web-config visual-studio web-config-transform

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

<connectionStrings>
    <add name="connStr1" connectionString="...
    <add name="ConnStr2" connectionString="...
    <add name="connStr3" connectionString="...
Run Code Online (Sandbox Code Playgroud)

有没有办法使用配置转换来删除特定的连接字符串?就像是:

<connectionStrings>
    <xdt:Remove connStr2?
Run Code Online (Sandbox Code Playgroud)

显然没有接近正确的语法,但你得到我的漂移...

小智 103

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

<configuration>
  <connectionStrings> 
    <add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString=" " /> 
  </connectionStrings> 
</configuration>
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么需要`connectionString`属性呢?不应该`xdt:Transform ="删除"`只能根据名称删除节点吗? (6认同)
  • "DefaultConnection-Web.config连接字符串"参数不能为null或为空.当我将代码放在web.release.config中时,我得到了什么.有任何想法吗?谢谢 (2认同)

M.B*_*ock 69

从关于该主题的MSDN文档:

<configuration xmlns:xdt="...">
  <connectionStrings>
    <add xdt:Transform="Remove" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Transform="Remove"是你正在寻找的魔力.Transform="RemoveAll"您还可以将其与特定的添加一起使用.

编辑

在第二个想法中,您也可以将Locator属性Remove上面定义的结合起来,以限制您实际想要删除的元素.

更确切地说:

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

或类似的应该工作.

  • XPath不起作用.正确的语法是@ hyke20 bellow提到的语法.要在线测试转换,您可以使用:http://webconfigtransformationtester.apphb.com/ (16认同)