Việc tạo một tệp cấu hình .NET cho một .DLL không phải là chuyện nhỏ và vì lý do chính đáng. Cơ chế cấu hình .NET có rất nhiều tính năng được tích hợp để hỗ trợ nâng cấp / cập nhật ứng dụng dễ dàng và để bảo vệ các ứng dụng đã cài đặt không chà đạp lên các tệp cấu hình của nhau.
Có một sự khác biệt lớn giữa cách sử dụng DLL và cách sử dụng ứng dụng. Bạn không thể cài đặt nhiều bản sao của một ứng dụng trên cùng một máy cho cùng một người dùng. Nhưng bạn rất có thể có 100 ứng dụng hoặc thư viện khác nhau đều sử dụng một số .NET DLL.
Trong khi hiếm khi cần theo dõi các cài đặt riêng cho các bản sao khác nhau của một ứng dụng trong một hồ sơ người dùng, thì rất có thể bạn sẽ không muốn tất cả các cách sử dụng khác nhau của một DLL để chia sẻ cấu hình với nhau. Vì lý do này, khi bạn truy xuất một đối tượng Cấu hình bằng phương thức "bình thường", đối tượng bạn nhận lại được gắn với cấu hình của Miền ứng dụng bạn đang thực hiện, thay vì lắp ráp cụ thể.
Miền ứng dụng được liên kết với tập hợp gốc đã tải tập hợp mà mã của bạn thực sự nằm trong. Trong hầu hết các trường hợp, đây sẽ là tập hợp của .EXE chính của bạn, là tập tin đã tải lên .DLL. Có thể quay các miền ứng dụng khác trong một ứng dụng, nhưng bạn phải cung cấp rõ ràng thông tin về tập hợp gốc của miền ứng dụng đó là gì.
Do tất cả điều này, quy trình tạo tệp cấu hình dành riêng cho thư viện không thuận tiện. Đó là quy trình tương tự mà bạn sẽ sử dụng để tạo tệp cấu hình di động tùy ý không bị ràng buộc với bất kỳ hội đồng cụ thể nào, nhưng bạn muốn sử dụng lược đồ XML, phần cấu hình và cơ chế thành phần cấu hình của .NET, v.v. Điều này đòi hỏi phải tạo một ExeConfigurationFileMap
đối tượng , tải dữ liệu để xác định nơi tệp cấu hình sẽ được lưu trữ và sau đó gọi ConfigurationManager
. OpenMappedExeConfiguration
để mở nó thành một Configuration
ví dụ mới . Điều này sẽ cắt bạn khỏi bảo vệ phiên bản được cung cấp bởi cơ chế tạo đường dẫn tự động.
Nói theo thống kê, có lẽ bạn đang sử dụng thư viện này trong môi trường nội bộ và không chắc bạn sẽ có nhiều ứng dụng sử dụng nó trong bất kỳ một máy / người dùng nào. Nhưng nếu không, có một điều bạn nên ghi nhớ. Nếu bạn sử dụng một tệp cấu hình toàn cầu duy nhất cho DLL của mình, bất kể ứng dụng nào đang tham chiếu đến nó, bạn cần phải lo lắng về xung đột truy cập. Nếu hai ứng dụng tham chiếu thư viện của bạn đang chạy cùng một lúc, mỗi ứng dụng có Configuration
đối tượng riêng của chúng mở, thì khi một ứng dụng lưu thay đổi, nó sẽ gây ra ngoại lệ vào lần tới khi bạn cố truy xuất hoặc lưu dữ liệu trong ứng dụng khác.
Cách an toàn và đơn giản nhất để giải quyết vấn đề này là yêu cầu hội đồng đang tải DLL của bạn cũng cung cấp một số thông tin về chính nó hoặc để phát hiện nó bằng cách kiểm tra Miền ứng dụng của cụm tham chiếu. Sử dụng công cụ này để tạo một số loại cấu trúc thư mục để giữ các tệp cấu hình người dùng riêng biệt cho mỗi ứng dụng tham chiếu DLL của bạn.
Nếu bạn chắc chắn muốn có các cài đặt chung cho DLL của mình bất kể nó được tham chiếu ở đâu, bạn sẽ cần xác định vị trí của mình cho nó thay vì .NET tự động tìm ra một vị trí thích hợp. Bạn cũng cần phải tích cực trong việc quản lý quyền truy cập vào tệp. Bạn sẽ cần lưu trữ bộ nhớ cache càng nhiều càng tốt, giữ cho Configuration
cá thể xung quanh CHỈ miễn là tải hoặc lưu, mở ngay lập tức trước và xử lý ngay sau đó. Và cuối cùng, bạn sẽ cần một cơ chế khóa để bảo vệ tệp trong khi nó được chỉnh sửa bởi một trong những ứng dụng sử dụng thư viện.