How to remove a ConnectionString using Config Transformations
Solution 1
From the MSDN documentation on the subject:
<configuration xmlns:xdt="...">
<connectionStrings>
<add xdt:Transform="Remove" />
</connectionStrings>
</configuration>
The Transform="Remove"
is the magic you're looking for. There is also a Transform="RemoveAll"
which you might be able to use in conjunction with a specific add(s).
EDIT
On second thought you may also be able to combine the Locator
attribute with the Remove
defined above to limit which elements you actually want to delete.
More definitively:
<configuration xmlns:xdt="...">
<connectionStrings>
<add xdt:Transform="Remove" xdt:Locator="XPath(configuration/connectionStrings[@name='ConnStr2'])" />
</connectionStrings>
</configuration>
Or similar should work.
Solution 2
This will remove a specific connection string based on its name.
<configuration>
<connectionStrings>
<add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString=" " />
</connectionStrings>
</configuration>
Note that the connectionString
value is not empty string, but is instead a space. Any non-empty value would do.
Related videos on Youtube
Comments
-
Didaxis almost 2 years
I have a Web.config with several ConnectionStrings
<connectionStrings> <add name="connStr1" connectionString="... <add name="ConnStr2" connectionString="... <add name="connStr3" connectionString="...
Is there a way using config transformations to remove a specific connectionstring? Something Like:
<connectionStrings> <xdt:Remove connStr2?
Obviously no where near the correct syntax, but you get my drift...
-
Leniel Maccaferri over 12 yearsThe XPath won't work. The correct syntax is the one mentioned by @hyke20 bellow. To test the transformation online you can use: webconfigtransformationtester.apphb.com
-
Leigh about 11 yearsThe 'DefaultConnection-Web.config Connection String' argument cannot be null or empty. Is what I get when I place your code inside my web.release.config. Any ideas? Thanks
-
Nicholas Petersen almost 8 yearsWhy would you remove the actual namespace in the sample above? It is: xmlns:xdt="schemas.microsoft.com/XML-Document-Transform". Fully: [<configuration xmlns:xdt="schemas.microsoft.com/XML-Document-Transform">]
-
Dmytro Shevchenko over 7 yearsWhy is the
connectionString
attribute required, at all? Shouldn'txdt:Transform="Remove"
be able to remove the node based on its name only? -
Robotnik over 7 years@DmytroShevchenko & Leigh - I don't get that error when I use hyke20's example, but if I leave off the 'connectionString' property I get a warning that it's missing.
-
M.Babcock about 7 years@AlexanderRyanBaggett Doing so limits the environment portability of the code which is the reason config transforms are used to begin with. There may be a way to do it but I'd suggest asking a new question.
-
Josh Gust almost 5 yearsYou may get a warning if the attribute is not present, but the transformation should still apply correctly. I personally use
connectionString="any"
to be clear to future me that the transform doesn't care what the value of the connection string is.