如何使用配置转换删除 ConnectionString
Posted
技术标签:
【中文标题】如何使用配置转换删除 ConnectionString【英文标题】:How to remove a ConnectionString using Config Transformations 【发布时间】:2012-02-13 18:45:08 【问题描述】:我有一个包含多个 ConnectionStrings 的 Web.config
<connectionStrings>
<add name="connStr1" connectionString="...
<add name="ConnStr2" connectionString="...
<add name="connStr3" connectionString="...
有没有办法使用配置转换来删除特定的连接字符串?类似的东西:
<connectionStrings>
<xdt:Remove connStr2?
显然没有正确的语法,但你明白我的意思......
【问题讨论】:
【参考方案1】:这将根据其名称删除特定的连接字符串。
<configuration>
<connectionStrings>
<add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString=" " />
</connectionStrings>
</configuration>
请注意,connectionString
值不是空字符串,而是一个空格。任何非空值都可以。
【讨论】:
“DefaultConnection-Web.config 连接字符串”参数不能为空或为空。当我将你的代码放在我的 web.release.config 中时,我得到了什么。有任何想法吗?谢谢 为什么需要connectionString
属性? xdt:Transform="Remove"
不应该只根据名称删除节点吗?
@DmytroShevchenko & Leigh - 当我使用 hyke20 的示例时,我没有收到该错误,但如果我不使用 'connectionString' 属性,我会收到一条警告说它丢失了。
如果属性不存在,您可能会收到警告,但转换仍应正确应用。我个人使用connectionString="any"
让我清楚地知道,转换并不关心连接字符串的值是什么。【参考方案2】:
来自MSDN documentation的主题:
<configuration xmlns:xdt="...">
<connectionStrings>
<add xdt:Transform="Remove" />
</connectionStrings>
</configuration>
Transform="Remove"
是您正在寻找的魔法。还有一个Transform="RemoveAll"
,您可以将其与特定的添加一起使用。
编辑
再想一想,您也可以将Locator
attribute 与上面定义的Remove
结合起来,以限制您实际要删除的元素。
更明确:
<configuration xmlns:xdt="...">
<connectionStrings>
<add xdt:Transform="Remove" xdt:Locator="XPath(configuration/connectionStrings[@name='ConnStr2'])" />
</connectionStrings>
</configuration>
或类似的应该可以工作。
【讨论】:
XPath 不起作用。正确的语法是下面@hyke20 提到的语法。要在线测试转换,您可以使用:webconfigtransformationtester.apphb.com 为什么要删除上面示例中的实际命名空间?它是:xmlns:xdt="schemas.microsoft.com/XML-Document-Transform"。完全:[以上是关于如何使用配置转换删除 ConnectionString的主要内容,如果未能解决你的问题,请参考以下文章