Tôi đang viết các ứng dụng tương thích với ứng dụng của bên thứ ba. Ứng dụng này trưng ra một API cho các nhà phát triển thông qua các phương thức trong một DLL. Một thời gian trước, nhà cung cấp ứng dụng này đã bắt đầu tích hợp các thành phần .NET của riêng họ vào chương trình của họ, và khi họ đã làm, họ quyết định rằng các thành phần của họ nên sử dụng ConfigurationManager
để nhận cài đặt khi chạy.Làm cách nào để có được Trình quản lý Cấu hình để tải cài đặt ứng dụng từ nhiều tệp?
Điều này có nghĩa là: chương trình của họ, foo.exe
, gọi fooengine.dll
và đọc cài đặt của nó từ foo.exe.config
. Chương trình của tôi, bar.exe
, cũng gọi số fooengine.dll
và đọc cài đặt của nó từ bar.exe.config
.
Vâng, điều đó hoàn toàn sai. Nhưng làm thế nào để sửa nó?
Cách giải quyết đơn giản là sao chép các cài đặt của foo.exe.config
trong bar.exe.config
. Điều đó sẽ hiệu quả, nhưng đó là ngu ngốc. Nó có nghĩa là từ quan điểm hành chính, một thiết lập nhất định phải được duy trì trong N tập tin khác nhau. Điều đó sẽ thất bại sớm hay muộn.
Tôi đã thử đặt thuộc tính configSource
trên phần appSettings
trong tệp cấu hình của mình. (Khi điều đó xảy ra, tôi đang sử dụng phần applicationSettings
cho cài đặt của mình và họ đang sử dụng phần appSettings
cho họ, vì vậy tôi có thể sống đơn giản bằng cách lấy phần đó từ một tệp khác.) Tuy nhiên, ConfigurationManager
không thích điều đó : nó muốn đường dẫn trong configSource
không chỉ liên quan đến nhưng bên dưới thư mục chương trình của tôi.
Tôi có thể đọc tệp cài đặt thực tế của mình thành một XmlDocument
và sau đó tự đặt chúng. Nhưng bây giờ tôi kết nối chặt chẽ mã của mình với việc triển khai thực hiện; nếu họ đưa ra bản phát hành mới di chuyển cài đặt sang phần applicationSettings
(là nơi họ nên bây giờ là năm 2009), mã của tôi sẽ bị hỏng.
Có cách nào khác không?
Tôi không tin "chỉ" là từ đúng.Tôi có thể gọi OpenMappedMachineConfiguration để có được một đối tượng Configuration. Nhưng điều đó không cập nhật ConfigurationManager. Và nó không tầm thường để có được từ đó thậm chí đến một danh sách các cặp tên/giá trị (hãy nhớ, các ứng dụng khác đang sử dụng phần "appSettings" kiểu cũ, không phải là phần "applicationSettings" hiện tại - GetSection trả về nó như một đối tượng DefaultSection) . Đó là khá ít mã để chỉ đọc tập tin vào một XmlDocument. –