I'm trying to separate my connection string from my App.config
, and as you can't do transformations like with Web.config
, I thought may I could use the configSource
attribute to point to another config file with the connection string in, but it doesn't seem to be working.
This works, App.config
:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=*snip*" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> <connectionStrings> <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Server=*snip*" /> </connectionStrings> </configuration>
But this doesn't, App.config
:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=*snip*" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> <connectionStrings configSource="connections.config" /> </configuration>
connections.config
:
<connectionStrings> <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="*snip*" /> </connectionStrings>
I'm looking for the simplest of solutions.
Any ideas?
You can simply access it using My. Settings. ConnectionString.
Connection strings can be added any where in configuration in such a way it should be a child of configuration. Its recommended that it should be placed after all tags so it remains visible if you need to change it in future.
Solution: In your web.config, use configSource to point to a local config file. Due to .Net restrictions, this must be at or below the level of the root config file. I just point to a file in the app folder itself: In a shared location that is accessible by the application pool user, add the config file containing shared connection strings.
You can use the ConnectionStringSettingsCollection to retrieve connection strings from application configuration files. It contains a collection of ConnectionStringSettings objects, each of which represents a single entry in the connectionStrings section.
To store connection strings in an external configuration file, create a separate file that contains only the connectionStrings section. Do not include any additional elements, sections, or attributes. This example shows the syntax for an external configuration file.
The other projects' app.config files also get copied to the output folder. So when you run the start up project, the app.config of the start up project IS in the same folder as connectionString.config. That's why there's no link needed.
If you added the file yourself, the build action (in the file properties) may not have been set correctly.
The Copy to Output Directory
option needs to be Copy if newer
or Copy Always
to ensure that the .config
file ends up in the bin
directory, otherwise it will not be there and trying to load the configuration will fail.
Right Click on file and then Click properties
Change to "Copy always" or "Copy if newer"
I had the same issue and Oded solution works for me. But I will just precise that to find out how to change the file "Copy to Output Directory option" to be "copy if newer or copy always", you have to
This helped me, I hope it will help you too
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With