Web.Config Debug/Release
The web.config transforms that are part of Visual Studio 2010 use XSLT in order to "transform" the current web.config file into its .Debug or .Release version.
In your .Debug/.Release files, you need to add the following parameter in your connection string fields:
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"
This will cause each connection string line to find the matching name and update the attributes accordingly.
Note: You won't have to worry about updating your providerName parameter in the transform files, since they don't change.
Here's an example from one of my apps. Here's the web.config file section:
<connectionStrings>
<add name="EAF" connectionString="[Test Connection String]" />
</connectionString>
And here's the web.config.release section doing the proper transform:
<connectionStrings>
<add name="EAF" connectionString="[Prod Connection String]"
xdt:Transform="SetAttributes"
xdt:Locator="Match(name)" />
</connectionStrings>
One added note: Transforms only occur when you publish the site, not when you simply run it with F5 or CTRL+F5. If you need to run an update against a given config locally, you will have to manually change your Web.config file for this.
For more details you can see the MSDN documentation
https://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx
Web.Debug.config is NOT transforming the connectionstrings to the Web.config in MVC 5 projects
Out of the box, transformations (debug/release) are applied on publishing (deploy). Not on build, on deploy.
To make this happen on build you may need to do some manual edits of the project file. Take a look here fore example: https://gist.github.com/EdCharbeneau/9135216
ASP.NET Web.Debug and Web.Release file transformations
I would recommend reading an overview of how web.config transforms work:
https://blog.elmah.io/web-config-transformations-the-definitive-syntax-guide/
In general, the Web.*.config files will make changes to the Web.config file depending on the selected publish configuration in Visual Studio. For example, if you want to update/replace a value in a debug publish, your Web.Debug.config file should look like:
<configuration xmlns:xdt="...">
<appSettings>
<add key"ClientId" value="ddddd" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key"ClientSecret" value="ddddd" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>
</configuration>
Here is the current Microsoft documentation on how these work:
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/transform-webconfig?view=aspnetcore-3.1
Web.Debug.config vs. Web.Release.config running web app in localhost
In the web.Release.config try this, it should work:
<appSettings>
<add key="MyServiceUrl" value="http://my-prod-site:8080/" xdt:Transform="Insert" />
</appSettings>
Read this: Web.config Transformation Syntax for Web Application Project Deployment
What are the Web.Debug.config and Web.Release.Config files for?
It's the new Web.config transformation feature of Visual Studio 2010. More information here.
Edit:
Are these files used to specify debug and release specific settings, so you don't clutter up the main web.config?
It isn't limited to three files, you could (in theory) have as many files as you have environments. The "top level" Web.config provides a template of your web config. The files under it provide replacement values specific to that environment (like if you have different connection strings for local/stage/test/whatever).
Does it even make sense to place a connection string in the root web.config file if I have have a local and remote one in the debug and release web.configs respectively.
It would only make sense if it wasn't going to change between environments. Sounds like in your case it does so, in your case no, it would not make sense to leave it in the Web.config.
Web.Config Debug/Release : Doesn't work
Configuration transformation is only done when publishing. Your base configuration file should have your development settings. If you choose to use the default build configurations, normally the release transform file should contain your production environment settings and the debug transform file will contain your test environment settings.
Personally, I usually create a new build configuration for testing and for production and leave the debug and release transforms empty.
Edit:
If you use the latest version of the SlowCheetah extension for Visual Studio, it will transform your configuration files during the build.
ASP.NET and web.config transforms not working when developing
Web config transforms do not run in Visual Studio (when you press F5/run the app in VS). They only run on builds when publishing.
Since your web.config doesn't have the setting and the application is expecting it, it's properly complaining about the missing tag.
You will need to add this tag to your web.config.
Related Topics
How to Embed an Application Manifest into an Application Using VS2008
How to Get Around the "'" Problem in SQLite and C#
Weak Event Handler Model for Use with Lambdas
How to Make Method Call Another One in Classes
Suppress Warning Cs1998: This Async Method Lacks 'Await'
If Int32 Is Just an Alias for Int, How Can the Int32 Class Use an Int
Wpf Databinding to Interface and Not Actual Object - Casting Possible
Passing Values Between Forms (Winforms)
Performing Inserts and Updates with Dapper
Get Value of C# Dynamic Property via String
How to Capture Screen to Be Video Using C# .Net