Web.config Build vs Release transform not working

web.config transform not working on publish
web-config transform=remove section
web.config transform appsettings
add config transform missing
xdt:transform=setattributes multiple attributes
web config transform for different environments
web.config transform preview
execute web config transform

I have an ASP.NET Web Application project that connects to a remote database via the Entity Framework. During debugging (eg running the project on my local computer), the IP address to the database is different than during release (eg after uploading the project to my webserver and running it from the browser). Until now I have always manually changed the database connection string in the Web.config file to switch between the two (basically I had to connection strings, one named 'Debug' and one 'Release' and I just swapped around the names whenever I deployed).

Now I just noticed that it should be possible to let this happen automatically via the Web.config Transformation Syntax where you put the modified connection string in the Web.Release.config version and it should then use that when the DLL is built under Release configuration.

However it does not seem to work for me...

Here is the relevant part of my regular Web.config file (which holds the Debug connection string for local usage):

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <!-- Debug connection string. Release connection string is in Web.Release.config file -->
    <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
  </connectionStrings>

</configuration>

Here is the Web.Release.config file, which according to the examples should replace the 'DatabaseEntities' connection string "A" with "B" if the DLL is under Release mode:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
  <connectionStrings>
    <add name="DatabaseEntities"
      connectionString="B"
      xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  </connectionStrings>

</configuration>

(Obviously "A" and "B" are just place-holders for my real connection strings)

When I debug the application (e.g. just press F5) the default Web.config is used and I can access the database. I then change the build configuration to Release via the Configuration Manager. All the projects in the solution are set to Release configuration. Then I Build the solution (just via Build or even via a complete rebuild (e.g. Clean, Rebuild)). I upload the newly built DLLs to the webserver, as well as the Web.config and Web.Release.config files, and when I try to access the database I am unable, it is still trying to access the database via the debug IP address and hence cannot find it...

It seems the Web.Release.config file is completely ignored, or at least the connection string is not being replaced.

What am I doing wrong? Is the transformation syntax wrong? Am I not building the application under Release mode correctly?

Then I Build the solution (just via Build or even via a complete rebuild (e.g. Clean, Rebuild)). I upload the newly built DLLs to the webserver, as well as the Web.config and Web.Release.config files

There is your error: Web config transforms won't work for your local environment, if you simply build. You need to publish.

Your deployment process seems weird: You are only copying DLLs, Web.config and web.Release.config. To me it seems, that you copy your source code and not a compiled application. A published WebApplication doesn't contain a web.release.config.

You should publish your project (rightclick on your WebApplication -> Publish) to your local filesystem and copy the files from there, or use another deployment method of your choice.

2 years ago I wrote an article about web.config transforms. It gives you a step-by-step tutorial for VS 2010 (The publish dialog changed in VS 2012): http://www.tomot.de/en-us/article/5/asp.net/how-to-use-web.config-transforms-to-replace-appsettings-and-connectionstrings

Web.config Build vs Release transform not working, Then I Build the solution (just via Build or even via a complete rebuild (e.g. Clean, Rebuild)). I upload the newly built DLLs to the webserver,  I recommend that you leave Web.config out of your Version Control. This solution for transforming the Web.config on the fly would mean that this specific file would constantly be modified and if one person is working with Debug and another person is working with Release the Web.config would probably get big changes constantly. Testing-tool

You can try the Slow Cheetah plugin:

http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5

This will let you see the transformations 'live' by giving you an extra context menu option. Right-click and choose Preview Transform to see the transformation without having to do a build. Its also really handy for implementing app.config transformations

How to enable transformations on build with Visual Studio · GitHub, A helpful note to add to your projects [base|debug|release].config I think the main problem with transforming the Web.config file directly, is that the file handle is  Just wanted to add this with all Joe Wilson said. I had a web.config web.Release.config and web.Debug.config. All came by default with asp.net. I set my devops build as "Release" and did the xml transformation and failed. However, if i do a debug build then it passes. So somehow it messed up w/ the "Release build with the web.Release.config".

I thought transformation is only done when you publish the site/app. It is not done when building an application. The latter would constantly change the web.config under source control (which would be a real hassle)

web.config transform not working, I think it was working once, and now it isn't anymore. When I build deployment package (with "Release" chosen in the current config) the "Build" doesn't even touch the web.config transforms or the package files/folders. To recap, when he builds on a particular configuration he wants a specific transform to be applied to web.config. So obviously you do not want to maintain a web.config file, because it is going to be overwritten. So what we need to do is to create a new file web.template.config, which is just a copy of web.config.

If it's only connections strings that are not overwritten during web.config transformation, then this is what I did: I cleared the "Use this connection string at runtime" check-box in the "Settings" section of "Publish Web" wizard. This setting was overwriting web.config transformation of the connection string.

Web.config transformations, The best tutorial for web.config/app.config transformations. Back when Visual Studio 2010 were the coolest kid on the block, You probably already have a file named Web.release.config in your project, so let's build from that: I've experienced some problems getting XDT transform files correctly nested  Right click Web.Config > Add Config Transformation. Overwrite the web.base.config with the contents of your clipboard. From now on Web.Config will be overwritten using transformations. For settings that apply to all cofigurations use Base. For settings that apply only to Release use Release. For settings that apply only to Debug use Debug.

Inside your csproj file, you can add an action to execute before every build and perform the web.config transformations:

<Target Name="BeforeBuild">
    <TransformXml Source="web.config" Transform="web.$(Configuration).config" Destination="web.config" />
</Target>

Transform web.config, Learn how to transform the web.config file when publishing an ASP. Transformations to the web.config file can be applied automatically when file for each build configuration (Debug|Release) requiring a web.config transformation. When publishing from Visual Studio and using a publish profile, see  It works perfectly fine from within Visual Studio. The scenario to reproduce: Create a Web project in Visual Studio; Make sure you are using the NuGet PackageReference format; Setup a config transformation for some file other than Web.config, e.g App_Config\Test.config

ASP.NET Web Deployment using Visual Studio: Web.config File , Reminder: If you get an error message or something doesn't work as you go A Web.config transformation file contains XML markup that specifies how to The default build configurations are Debug and Release, and you can to the Web.​config file, so you do not need to use Web Deploy parameters. Once the Web application or Website gets created, right-click on this and select an option "Add Config Transforms". If you see the below screenshot, the "Add Config Transform" option is disabled by default. We have to do some configurations to make it enabled. Follow the below steps to enable the "Add Config Transform" option.

ASP.NET Tutorial: Using Transforms In Your ASP.NET Project Part , I experienced them when I started working with ASP.NET back say while the web.config file was important, the web.xxx.config files were not necessary. Web​.Release.Config — These changes are meant for a published release. When you build your project in Visual Studio, MSBuild takes your current  In Solution Explorer, expand Web.config to see the Web.Debug.config and Web.Release.config transformation files that are created by default for the two default build configurations. You can create transformation files for custom build configurations by right-clicking the Web.config file and choosing Add Config Transforms from the context menu.

Web.config transforms not working in Azure DevOps Pipeline, Web.config transforms not working in Azure DevOps Pipeline application to an Azure App Service using Azure DevOps Build and Release pipeline. files this is fine, I have no need for Debug or Release-configuration files. Dependent config files, such as "web.debug.config" or "web.release.config", are only used by deployment as a template to transform the original web.config . They are not involved in the debugging story. If I understand correctly, you want to have web.config transform wired up on debugging?

Comments
  • This can sometimes be a little tricky, If you get one setting wrong it won't work. If you can add a screenshot of the Configuration Manager, we may be able to see something you have overlooked.
  • This post had helped me: [stackoverflow.com/questions/3305096/… [1]: stackoverflow.com/questions/3305096/…
  • Is there a way to do the transform on build/F5? It would make life easier.
  • You could try to assign a shortcut to Build.PublishSelection, to save a few mouseclicks.
  • I just publish it to my C:/Publish folder and then I set up the database that I want to test release settings with. You can set the request in your windows/system32/drivers/etc/hosts file settings "127.0.0.1 published" and setup a application in IIS for the same(published). Then publish and test anytime.
  • @Erick T: stackoverflow.com/questions/3613714/…?