2010-02-09 28 views
6

Ứng dụng asp.net của tôi đang sử dụng web.config cho cấu hình chung. Tôi cũng có một phần ánh xạ một số đối tượng dữ liệu vào các chuỗi kết nối và phần đó sẽ là vài nghìn dòng. Tôi muốn di chuyển phần đó sang tệp cấu hình khác "dataMappings.config", vì vậy tôi không lên web.config - có cơ chế chuẩn để truy cập vào tệp cấu hình đó không?Cài đặt đọc từ tệp cấu hình riêng biệt

Cảm ơn bạn, Andrey

Trả lời

10

Trong mỗi phần, bạn có thể xác định configSource, có thể trỏ đến một đường dẫn tập tin bên ngoài. Dưới đây là ví dụ đơn giản:

<connectionStrings configSource="myConnectionStrings.Config" /> 
<appSettings configSource="myAppSettings.Config" /> 

Chỉ cần đảm bảo không sử dụng phần mở rộng tệp .xml vì có thể xem trong trình duyệt. .config sẽ không được phục vụ bởi máy chủ web.

Bởi vì phần cấu hình của bạn vẫn được định nghĩa trong web.config (do đó trỏ đến tập tin bên ngoài), bạn có thể truy cập vào thông tin này thông qua các tuyến đường bình thường (WebConfigurationManager.AppSettings, WebConfigurationManager.GetSection, ConfigurationManager, hoặc xử lý phần tùy chỉnh khi cần thiết)

+0

Nó có hoạt động nếu tôi đang sử dụng phần tùy chỉnh không? Hoặc tôi có cần phải làm điều gì đó trong mã phần tùy chỉnh đó để hỗ trợ thuộc tính configSource không? – Andrey

+0

+1 - Câu trả lời hay, đánh tôi với nó! –

+0

@Andrey: thao tác này sẽ hoạt động với ** bất kỳ ** 'ConfigurationSection' nào trong .NET 2.0 trở lên. –

1

Tôi đã sử dụng một trình trợ giúp cấu hình trong một tệp DLL được chia sẻ và tệp app.config trong tệp DLL sử dụng công cụ Settings.Properties.Default bằng cách chỉnh sửa dự án và thiết lập tab cài đặt. Có vẻ như giá trị đó không được đọc trừ khi bạn biên dịch lại và đồng bộ hóa lại app.config (trong dll) với các thiết lập của dự án.

Điều này phù hợp với tôi. Tôi không nhớ nơi tôi có nguồn cảm hứng. Tôi chỉ đưa lớp này vào một dự án được chia sẻ ở đâu đó. cho phép bất kỳ DLL nào gọi các thiết lập riêng của nó, cho phép bạn thay đổi các mục dllFile.dll.config. Tôi sử dụng điều này cho các chuỗi kết nối. Thông báo trước là trong phương thức này, chuỗi kết nối phải là một chuỗi kiểu và không phải là chuỗi kết nối đặc biệt.

using System; 
using System.Configuration; 

namespace Shared 
{ 
    public static class ConfigurationHelper 
    { 
     public static string GetConfigValue(string keyName) 
     { 
      string codebase = System.Reflection.Assembly.GetCallingAssembly().CodeBase; 
      Uri p = new Uri(codebase); 
      string localPath = p.LocalPath.ToLowerInvariant(); 
      string executingFilename = System.IO.Path.GetFileNameWithoutExtension(localPath); 
      string sectionGroupName = "applicationSettings"; 
      string sectionName = executingFilename + ".Properties.Settings"; 
      string configName = localPath + ".config"; 
      ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
      fileMap.ExeConfigFilename = configName; 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
      ConfigurationSectionGroup group = config.GetSectionGroup(sectionGroupName); 
      ClientSettingsSection section = null; 
      foreach (ClientSettingsSection sect in group.Sections) 
      { 
       if (sect.SectionInformation.Name.Equals(sectionName, StringComparison.InvariantCultureIgnoreCase)) 
       { 
        section = sect; 
        break; 
       } 
      } 
      SettingElement elem = section.Settings.Get(keyName); 
      if (elem == null) 
       return ""; 
      else 
       return elem.Value.ValueXml.InnerText.Trim(); 
     } 
    } 
} 

//in DLL 
void foo() 
{ 
    var str = ConfigurationHelper.GetSetting("ConnectionStringProd"); 
} 
Các vấn đề liên quan