Search code examples
c#web-configapp-configconfigurationmanager

Reading value from Web.Config that uses configSource files


In keeping with the recommendation here we separated our connection string into an xml file. Our web.config:

//old - works
<connectionStrings>
   <add name="DefaultConnection" 
        connectionString="Data Source=.\SQLExpress;Initial Catalog=xxx;Integrated Security=True;" 
        providerName="System.Data.SqlClient" />
<connectionStrings>
//new - fails
<connectionStrings configSource="connections.config" />

content of connections.config:

<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
   <add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=xxx;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

Both files are located in the project root folder. EntityFramework works fine with both solutions. However when I try to obtain the connection string for some tests it fails to retrieve.This is the code that we use to extract the connection string:

string ConnectionString =
       ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

Reading the connection string direct from web.config works, when we introduce the ConfigSource it fails. What do we need to make it work


Solution

  • You need to set the Copy to Output Directory property of your configuration file to either Copy always or Copy if newer.

    enter image description here

    If you don't do this, your ConnectionStrings.config file will not be copied to the output debug/release folder and so will not be found.