1

I've made several configurations inside a project for different environments, one is debug and another is release

Web.config:

<configuration>
  <connectionStrings>
    <add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.7.131;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=debugMe;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <appSettings>
    <add key="FilePath" value="D:\temp"/>
    <add key="debugMode" value="Y"/>
  </appSettings>
</configuration>

Web.debug.config:

   <?xml version="1.0" encoding="utf-8"?>

    <!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <!--
        In the example below, the "SetAttributes" transform will change the value of 
        "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
        finds an attribute "name" that has a value of "MyDB".

        <connectionStrings>
          <add name="MyDB" 
            connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
            xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
        </connectionStrings>
      -->
      <system.web>
        <!--
          In the example below, the "Replace" transform will replace the entire 
          <customErrors> section of your web.config file.
          Note that because there is only one customErrors section under the 
          <system.web> node, there is no need to use the "xdt:Locator" attribute.

          <customErrors defaultRedirect="GenericError.htm"
            mode="RemoteOnly" xdt:Transform="Replace">
            <error statusCode="500" redirect="InternalError.htm"/>
          </customErrors>
        -->
      </system.web>
  <connectionStrings xdt:Transform="Replace">
        <add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.7.131;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=debugMe;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>

Web.live.config:

   <?xml version="1.0" encoding="utf-8"?>

    <!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <!--
        In the example below, the "SetAttributes" transform will change the value of 
        "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
        finds an attribute "name" that has a value of "MyDB".

        <connectionStrings>
          <add name="MyDB" 
            connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
            xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
        </connectionStrings>
      -->
      <system.web>
        <!--
          In the example below, the "Replace" transform will replace the entire 
          <customErrors> section of your web.config file.
          Note that because there is only one customErrors section under the 
          <system.web> node, there is no need to use the "xdt:Locator" attribute.

          <customErrors defaultRedirect="GenericError.htm"
            mode="RemoteOnly" xdt:Transform="Replace">
            <error statusCode="500" redirect="InternalError.htm"/>
          </customErrors>
        -->
      </system.web>
  <connectionStrings xdt:Transform="Replace">
        <add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.7.133;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=Invi#2014;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>

Here's the problem:

Whenever I use debug or release config, the connection string is still the one in web.config instead of that in web.release.config

Is there anything that I did wrong?

User2012384
  • 4,769
  • 16
  • 70
  • 106

4 Answers4

2

It is sometimes better to use item-by-item transformations. Instead of section replacement use

<add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.7.133;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=Invi#2014;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>

It is very useful to use this approach when you have lots of attributes in node and need to change only one, you just use SetAttributes instead of Replace for example.

Vladmir
  • 1,255
  • 9
  • 13
  • Thank you very much for your advice..but the problem is...it seems no difference after and before the config transformation...the connection is still the old one.... – User2012384 Aug 17 '14 at 14:39
  • You can turn on option in Visual Studio - Projects and Solutions - Build and Run MSBuild project build output verbosity to detailed and found your configuration transformation there. It will show you what is wrong. Usually it looks like 'transformation skipped because ...' – Vladmir Aug 18 '14 at 06:08
  • Tools – Options – Projects and Solutions – Build and Run, there’s the MSBuild project build output verbosity combo box in VS2013. http://blogs.msdn.com/b/saraford/archive/2008/10/07/did-you-know-you-can-configure-the-msbuild-verbosity-in-the-output-window-329.aspx – Matt Lengenfelder Dec 11 '14 at 15:30
2

Is your release build setup to use the Web.live.config file? by default Release expects a file named Web.Release.Config I'm just mentioning this because the file is listed as Web.live.config but you are calling it "Release". If it's just a typo and the names are consistent or if your release build configuration is set to "live" then ignore this.

2

For me, going to properties of the transformation file and changing the property; Copy to Output Directory to Copy Always did the trick. Got a hint from Matt Kogaj's answer

Web Config Transform file Properties Window

Devraj Gadhavi
  • 3,541
  • 3
  • 38
  • 67
  • Thanks. When you create new build configurations, this setting will need to be updated. If it is not copied to the output directory, then the transform won't find it, thus the resulting file will not have the transformed elements expected. – Neil Monroe May 26 '22 at 20:04
0

You have to remove property xdt:Transform in ConnectionString Tag. Like below;

<connectionStrings>
    <add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.7.133;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=Invi#2014;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
byteboy
  • 107
  • 1
  • 10