2010-01-08 18 views
6

Tôi đang thử nghiệm tệp cấu hình của mình cho một ứng dụng biểu mẫu giành chiến thắng. Trong LocalTestRun.testrunconfig tôi đặt nó để sao chép app.config. Tôi đã kiểm tra Environment.CurrentDirectory trong khi thử nghiệm đang chạy và tệp không có chuỗi kết nối bổ sung này. Đây là phương pháp kiểm tra:Tại sao ConfigurationManager.OpenMappedExeConfiguration có chuỗi kết nối phụ không có trong tệp?

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

    } 

Tuy nhiên Khi tôi lặp các config.ConnectionStrings.ConnectionStrings Tôi có một chuỗi cấu hình bổ sung mà không có trong các file:

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

Đây không phải là và không bao giờ là một asp.net dự án.

Dưới đây là cấu hình 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> 

đâu chuỗi kết nối thêm này đến từ đâu?

+0

+1 tôi đã luôn luôn tự hỏi điều này, bây giờ tôi biết, cảm ơn :) –

Trả lời

10

Chuỗi kết nối đó được xác định trong tệp cấu hình cấp máy, machine.config.

Nếu bạn nhìn vào các tập tin C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config, bạn sẽ thấy những phần sau đây:

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

Có cách nào để đọc app.config trong sự cô lập hơn là tải app.config dưới dạng tệp xml không? – Maslow

+0

Không, xin lỗi - nó giống như marc_s nói! –

10

Dave đóng đinh câu trả lời chính - upvoted.

Nhưng: nếu bạn muốn thoát khỏi bất kỳ chuỗi kết nối từ machine.config hoặc bất kỳ web.configs "up-stream", bạn luôn có thể sử dụng:

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

Đó đầu tiên <clear/> trong kết nối phần chuỗi xóa mọi chuỗi kết nối hiện tại trước đó và bắt đầu bằng một phương tiện chặn sạch.

+0

Có cách nào để thông báo cho trình quản lý cấu hình chỉ tải tệp tôi chỉ định để thử nghiệm không? – Maslow

+0

Tôi muốn kiểm tra tệp cấu hình của ứng dụng chứ không phải của máy. – Maslow

+0

Không, hệ thống cấu hình ASP.NET đã là một hệ thống phân cấp từ machine.config, web.config "root" của bạn và mọi web.configs "ngược dòng" tiềm ẩn. Bạn không thể thay đổi điều đó, nó là một cơ chế cơ bản như vậy. –

Các vấn đề liên quan