Đang tải các tệp cấu hình tùy chỉnh


118

Tôi biết tôi có thể mở các tệp cấu hình liên quan đến một hợp ngữ bằng ConfigurationManager.OpenExe(exePath)phương thức tĩnh nhưng tôi chỉ muốn mở một cấu hình không liên quan đến một hợp ngữ. Chỉ là một tệp cấu hình .NET tiêu chuẩn.

Câu trả lời:


244

những bài báo do Ricky đăng rất hay, nhưng tiếc là chúng không trả lời câu hỏi của bạn.

Để giải quyết vấn đề của bạn, bạn nên thử đoạn mã này:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Nếu cần truy cập một giá trị trong cấu hình, bạn có thể sử dụng toán tử chỉ mục:

config.AppSettings.Settings["test"].Value;

1
@Oliver By whateverYouLikeExtension, ý bạn là bạn phảithứ gì đó sau đóconfig. ?
Svish

4
@Oliver Got xung quanh để thử bây giờ, và dường như làm việc tốt mà không :)
Svish

1
Tôi đã làm điều này, nhưng khi tôi truy cập ConfigurationManager.ConnectionStrings, tôi vẫn nhận được dữ liệu cũ. Tôi đang thiếu gì?
MAW74656

1
@ MAW74656: Bạn không cần phải truy cập ConfigurationManager.ConnectionStrings. Thay vào đó, bạn phải đọc giá trị từ configđối tượng được trả về từ câu lệnh cuối cùng ở trên.
Oliver

3
Đối với bất kỳ ai khác đang tìm kiếm cách tải appSettings sau khi hoàn tất: var foo = config.AppSettings.Settings ["test"]. Value;
Roro

8

Tệp cấu hình chỉ là một tệp XML, bạn có thể mở nó bằng cách:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

và sau đó truy xuất các giá trị bằng cách:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");

Mã không thể truy cập được phát hiện sau khi throw new Exception("No configuration file found.", e);.
Oybek

Tôi sẽ xóa trả về null, nó sẽ không thực sự đạt được.
Otávio Décio,

7
tại sao phải sử dụng XML khi bạn có các lớp tuyệt vời như vậy từ thư viện .Net. Tôi sẽ không đề nghị sử dụng cái này, kém về thiết kế. Tiếp theo là gì? triển khai một lớp chuỗi khác ... hãy xem xét điều này.
Yuki

@ OtávioDécio Tôi có thể thêm system.diagnostics để cho phép theo dõi trong tệp .config tùy chỉnh không?
FaizanHussainRabbani

@FaizanRabbani không chắc chắn về tính năng theo dõi tùy chỉnh, nhưng theo msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx, bạn có thể thêm chẩn đoán vào tệp cấu hình.
Otávio Décio

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.