2008-09-30 24 views
11

Chúng ta có một "động cơ" tải các dll động (bất cứ thứ gì nằm trong một thư mục nhất định) và gọi các lớp Workflow từ chúng theo cách phản chiếu.App.config cho dll

Hiện tại, chúng tôi có một số quy trình làm việc mới yêu cầu quyền truy cập vào cơ sở dữ liệu, vì vậy tôi thấy rằng tôi sẽ đặt một tệp cấu hình trong thư mục dll.

Nhưng vì một lý do nào đó quy trình làm việc của tôi không thấy tệp cấu hình.

<configuration> 
    <appSettings> 
     <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" /> 
    </appSettings> 
</configuration> 

Với tập tin cấu hình trên, đoạn mã sau đó in ra chuỗi rỗng:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]); 

Tôi nghĩ rằng những gì tôi muốn là chỉ cần chỉ định một tên tập tin cấu hình, nhưng tôi đang gặp vấn đề ở đây. Tôi chỉ không nhận được kết quả. Bất cứ ai có bất kỳ con trỏ?

+0

Tôi nghĩ bạn nên tham khảo video của mình để biết một số ý tưởng http://www.youtube.com/watch?v=juBDM3fb-i0 –

Trả lời

7

Nếu mẫu mã của bạn để đọc AppSettings là trong DLL của bạn, sau đó nó sẽ cố gắng để đọc tập tin cấu hình cho các ứng dụng và không phải là tập tin cấu hình cho DLL. Điều này là do bạn đang sử dụng Reflection để thực thi mã.

+0

Cảm ơn. Điều đó giải quyết nó. – daharon

4

Vui, ở đây tôi đang làm một điều gì đó rất giống và tệp cấu hình chỉ tải tốt. Trong trường hợp của chúng tôi, tôi nghĩ mỗi tên tệp cấu hình mới khớp với tên của tập hợp được liên kết. Vì vậy, MyLibrary.dll sẽ có một tập tin có tên MyLibrary.dll.config với thông tin cho tập tin đó lắp ráp. Ngoài ra, ví dụ tôi có tiện dụng là sử dụng VB.Net thay vì C# (chúng tôi có một số của mỗi) và tất cả các cài đặt trong đó cho không gian tên My.Settings cụ thể VB, vì vậy chúng tôi không sử dụng lớp ConfigurationManager trực tiếp đọc chúng.

Các thiết lập cho mình trông như thế này:

<applicationSettings> 
    <MyLibrary.My.MySettings> 
     <setting name="SomeSetting" serializeAs="String"> 
      <value>12345</value> 
     </setting> 
    </MyLibrary.My.MySettings> 
</applicationSettings> 
0

Nếu tôi nhớ chính xác, app.config sẽ được nạp từ thư mục ứng dụng của bạn, vì vậy nếu bạn đang tải dlls từ một số thư mục khác, bạn sẽ muốn các khóa mà họ cần trong tệp cấu hình của ứng dụng của bạn.

+0

Cảm ơn bạn. Điều đó có vẻ là vấn đề của tôi. Tôi đã thay đổi mọi thứ và nó hoạt động. – daharon

0

Tôi không hoàn toàn chắc chắn nhưng tôi nghĩ rằng lớp học chỉ hoạt động với đường dẫn của phương thức nhập của AppDomain (đường dẫn của exe hầu hết thời gian) theo mặc định. Bạn cần gọi OpenExeConfiguration (chuỗi exePath) (Framework 2.0 trở lên) trước tiên để trỏ đến một tệp cấu hình khác.

1

Tôi đã viết điều này cho một hệ thống tương tự. Hồi ức của tôi là tôi đã sử dụng Assembly.GetExecutingAssembly để lấy đường dẫn tệp đến tệp DLL, gắn thêm .config vào tên đó, tải nó dưới dạng XmlDocument, được điều hướng đến nút <appSettings> và chuyển cho phương thức 'Create.

1

Đây là một cách - AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "đường dẫn đến tệp cấu hình");

Gọi hàm tạo.