2008-11-22 38 views
9

Tôi có một tệp dll .NET cần đọc cài đặt cấu hình từ tệp cấu hình của nó. Thông thường, tệp cấu hình được đặt trong cùng thư mục với tệp DLL. Nhưng làm thế nào để tôi đọc các tập tin cấu hình nếu DLL được GAC'ed, bởi vì tôi có thể đặt chỉ các DLL trong GAC, và không phải nó là tập tin cấu hình.Định cấu hình tệp cho các hội đồng trong GAC

Trả lời

13

Người dùng có cần định cấu hình Dll không? Nếu vậy, thì DLL phải sử dụng các thiết lập cấu hình từ tệp app.config, không phải là cấu hình riêng của nó. Tệp app.config phải được lưu trữ trong cùng thư mục với ứng dụng. Nếu không, sau đó bạn có thể đi một vài cách khác nhau. Bạn có thể thay đổi tệp machine.config để Dll của bạn có thể tìm thấy chúng ở đó. Tôi sẽ không làm điều này. Ngoài ra, bạn có thể lưu cấu hình trong một lớp cài đặt. Chúng có thể được ghi đè thông qua cấu hình, nhưng mặc định của bạn sẽ được đặt trong mã được tạo cho lớp cài đặt thông qua các thuộc tính và do đó việc thiếu tệp cấu hình sẽ không ảnh hưởng đến Dll của bạn khi các giá trị mặc định là tất cả bắt buộc.

12

Tôi đồng ý với tvanfosson dll Gac'ed sẽ đọc từ đường dẫn của ứng dụng. Nhưng bạn cũng có thể thông báo cho dll đó là con đường theo cách này:

System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = "THE PATH TO THE CONFIG"; 
System.Configuration.Configuration cfg = 
System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None); 

string thevalue=cfg.AppSettings.Settings[variable].Value; 
+0

tvanfosson đã có một câu trả lời tốt nhưng tôi nghĩ rằng đây là một câu trả lời phù hợp hơn. – Keith

1

Bạn có thể tận dụng AppDomain.CurrentDomain.BaseDirectory kể từ khi DLL sẽ không được thực hiện bởi bản thân bạn chỉ cần để có được thực thi Tập tin thư mục.

Cái gì như:

var appDomain = AppDomain.CurrentDomain.BaseDirectory; 
string sFileName = appDomain.Replace("\\bin\\Debug", ""); 
sFileName = sFileName + "Config\\config.xml"; 
+0

Xin lỗi vì đây là lần đầu tiên tôi trả lời ở đây .. mã không được định dạng tốt :( –

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