2010-01-08 80 views
6

我正在爲獲勝表單應用程序測試我的配置文件。 在LocalTestRun.testrunco​​nfig中,我將其設置爲複製app.config。我在運行測試時檢查了Environment.CurrentDirectory,並且文件沒有這個額外的連接字符串。這是測試方法:爲什麼ConfigurationManager.OpenMappedExeConfiguration有一個額外的連接字符串不在文件中?

[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); 
     } 
     } 

    } 

然而當我遍歷config.ConnectionStrings.ConnectionStrings我有一個額外的配置字符串,它是不是在文件中:

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

這是不是,也永遠是一個asp.net項目。

這裏的配置文件:

<?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> 

這哪裏是額外的連接字符串是從哪裏來的?

+0

+1我一直在想這個,現在我知道了,謝謝:) – 2010-03-23 20:23:11

回答

10

該連接字符串在機器級配置文件中定義,machine.config

如果你看一下這個文件C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config,你會看到以下部分:

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

有沒有辦法單獨讀取app.config而不是將app.config作爲xml文件加載? – Maslow 2010-01-08 18:59:31

+0

不,對不起 - 正如marc_s所說! – 2010-01-08 23:59:38

10

戴夫釘的主要答案 - upvoted。

但是:如果你想擺脫從在machine.config或任何「上升流」 web.configs任何連接字符串,你可以隨時使用:

<?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> 

首先<clear/>在連接字符串部分會清除以前存在的任何連接字符串,並以乾淨的版本開始。

+0

有沒有辦法告訴配置管理器只加載我指定用於測試的文件? – Maslow 2010-01-08 17:44:36

+0

我想測試應用程序的配置文件,而不是機器的。 – Maslow 2010-01-08 17:45:54

+0

不,ASP.NET配置系統已經是來自machine.config,您的「根」web.config和任何潛在的「上游」web.configs的層次結構。你不能改變這一點,這是一個基本的機制。 – 2010-01-08 17:52:18

相關問題