2009-07-28 22 views
7

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?

Trả lời

2

OK, tôi nghĩ rằng tôi đã tìm thấy câu trả lời, ít nhất là đối với phiên bản cụ thể của vấn đề này.

.NET 2.0 ConfigurationManager hỗ trợ thuộc tính file trên phần tử appSettings. Điều này cho phép bạn lấy nội dung của phần tử đó từ một tệp bên ngoài. Vì vậy, những gì tôi làm là:

  1. Cắt appSettings yếu tố ra khỏi foo.exe.config và dán nó vào một tập tin trong thư mục đó gọi là, giả sử, appSettings.xml.

  2. Thêm phần tử mới vào foo.exe.config: <appSettings file="appSettings.xml"/>.

  3. Thêm một yếu tố để bar.exe.config: <appSettings file="c:\program files\foo\appSettings.xml"/>

này hoạt động. Nhưng nó chỉ hoạt động bởi vì chương trình của tôi không sử dụng appSettings.

2

Bạn chỉ có thể load their configuration file.

+0

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. –

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