How can I update connectionString in my web.config during deploy with MSDeploy?
Current web.config contains:
<?xml version="1.0" encoding="utf-8"?><configuration> <connectionStrings><site Setting="ON" /><remove name="conn1" /><add name="conn1" connectionString="server=server.database.windows.net;database=devdatabase1;user id=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" /><add name="conn2" connectionString="server=server.database.windows.net;database=devdatabase2;user id=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" /><add name="conn3" connectionString="server=server.database.windows.net;database=devdatabase3;user id=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" /><add name="StorageConnectionString" connectionString="DefaultEndpointsProtocol=http;AccountName=devstorage;AccountKey=devkey" /></connectionStrings></configuration>
What I need here is update connectionString for each add name="conn1|2|3".
I found this post and made Property.xml file with:
<parameters><parameter name="ChangeSiteSetting" value="OFF"><parameterEntry type="XMLFile" scope="web.config$" match="//configuration/connectionStrings/site/@Setting"/></parameter><parameter name="ChangeRemoveName" value="NewConn"><parameterEntry type="XMLFile" scope="web.config$" match="//configuration/connectionStrings/remove/@name"/></parameter> <parameter name="ChangeAddName" value="NewConn"><parameterEntry type="XMLFile" scope="web.config$" match="//configuration/connectionStrings/remove/add/@name"/></parameter><parameter name="ChangeConnection" value="NewConnString"><parameterEntry type="XMLFile" scope="web.config$" match="//configuration/connectionStrings/remove/add/@connectionString"/></parameter></parameters>
And run it as:
$ msdeploy -verb:sync -source:dirpath=C:\BuildTest\Src -dest:dirpath=C:\BuildTest\Dst -setParamFile=C:\BuildTest\Property.xml
Result is:
$ type Dst\web.config<?xml version="1.0" encoding="utf-8"?><configuration><connectionStrings><site Setting="OFF" /><remove name="NewConn" /><add name="conn1" connectionString="server=server.database.windows.net;database=devdatabase1;user id=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" /><add name="conn2" connectionString="server=server.database.windows.net;database=devdatabase2;user id=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" /><add name="conn3" connectionString="server=server.database.windows.net;database=devdatabase3;user id=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" /><add name="StorageConnectionString" connectionString="DefaultEndpointsProtocol=http;AccountName=devstorage;AccountKey=devkey" /></connectionStrings></configuration>
I tried to set:
<parameterEntry type="XMLFile" scope="web.config$" match="//configuration/connectionStrings/remove/add[@name=conn1]/@connectionString"/>
to reach and update connectionString name="conn1" - but this not works too.
Idea is to have separate Property.xml files for DEV, STAGE, PROD environments and update them during deploy viavariable, e.g.:
$ msdeploy -verb:sync -source:dirpath=C:\BuildTest\Src -dest:dirpath=C:\BuildTest\Dst -setParamFile=C:\BuildTest\DEVproperty.xml