Why is there an extra connection string in ConfigurationManager.OpenMappedExeConfiguration that is not in the file?

I am testing my configuration file for a win form application. In LocalTestRun.testrunconfig, I set it to copy app.config. I checked Environment.CurrentDirectory during test execution, and the file also does not have this extra connection string. This is a testing method:

 [TestMethod] public void Configuration_ConnectionStrings_Connect() { Console.WriteLine(Environment.CurrentDirectory); Assert.IsTrue(System.IO.File.Exists("App.Config")); var configFileMap = new ExeConfigurationFileMap(){ ExeConfigFilename = "App.Config"}; var config= ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); foreach (ConnectionStringSettings connectionString in config.ConnectionStrings.ConnectionStrings) { //Assumes all connections are to Sql server, test must be updated if not Assert.AreEqual("System.Data.SqlClient",connectionString.ProviderName,"Test was only designed for SQL clients"); using (var cn=new System.Data.SqlClient.SqlConnection(connectionString.ConnectionString)) { cn.Open(); Assert.AreEqual(System.Data.ConnectionState.Open,cn.State); } } } 

However, when I repeat config.ConnectionStrings.ConnectionStrings , I have an extra configuration line that is missing from the file:

 data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

This is not and has never been an asp.net project.

Here's the configuration file:

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="HLIT_Ticketing.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> <connectionStrings> <add name="HLIT_Ticketing.Properties.Settings.HomeQConnectionString" connectionString="Data Source=******\*****;Initial Catalog=*****;Persist Security Info=True;User ID=*****;Password=******" providerName="System.Data.SqlClient" /> </connectionStrings> <userSettings> <HLIT_Ticketing.Properties.Settings> <setting name="AssociateRole" serializeAs="String"> <value>Associate</value> </setting> <setting name="DeveloperRole" serializeAs="String"> <value>Developer</value> </setting> </HLIT_Ticketing.Properties.Settings> </userSettings> 

Where is this extra connection string located?

+6
c # unit-testing app-config configurationmanager
source share
2 answers

This connection string is defined in the machine level configuration file, machine.config.

If you look at the file C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config , you will see the following section:

 <connectionStrings> <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> </connectionStrings> 
+10
source share

Dave nailed the main answer - up.

But: if you want to get rid of any connection string from the machine.config file or any up-stream web.configs, you can always use:

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <clear /> <add name="HLIT_Ticketing.Properties.Settings.HomeQConnectionString" connectionString="Data Source=******\*****;Initial Catalog=*****;Persist Security Info=True;User ID=*****;Password=******" providerName="System.Data.SqlClient" /> </connectionStrings> 

In the first line <clear/> in the line of connection lines, all previously existing connection lines are erased and begin from scratch.

+10
source share

All Articles