2010-08-22 36 views
5

(Xin lỗi vì có thể là một câu hỏi tầm thường, tôi đến từ Java & Maven, và vẫn chưa bao bọc tâm trí của mình xung quanh C# phụ thuộc)C# giải pháp: sử dụng một dự án "Globals" cho dll bên ngoài?

Tôi muốn sử dụng log4net trong tất cả các dự án của mình. Vì tôi không muốn thêm dll vào tất cả các dự án, tôi đã tạo một dự án "Globals", thêm một tham chiếu đến log4net.dll trong đó, và được tham chiếu từ tất cả các dự án khác cho dự án "Globals".

Tuy nhiên, tôi dường như không thể truy cập vào các lớp học log4net từ bất kỳ dự án nào khác.

using Globals.log4net; 

Có vẻ như không hoạt động.

Tôi đang làm gì sai?

+1

Bạn đã tiếp xúc log4net từ 'Globals' như thế nào? – Oded

+0

Tôi làm như thế nào? – Yossale

Trả lời

3

Nếu tất cả những gì bạn đã làm là tham khảo DLL, thì tất cả những gì bạn đã làm là nhận được bản sao của DLL với mọi tham chiếu đến dự án Globals của bạn. Bạn vẫn không phải là sử dụng thư viện.

Điều tôi thường làm sẽ tạo ra giao diện ILogger, triển khai thực hiện bằng cách sử dụng log4net trong dự án Globals và sử dụng triển khai đó trong các dự án khác (cộng với triển khai thử nghiệm).

+1

Thêm một tham chiếu chỉ có nghĩa là lắp ráp của bạn bây giờ phụ thuộc vào thư viện tham chiếu, do đó, nó được sao chép đến mọi nơi lắp ráp được sử dụng. Tuy nhiên, hội đồng của bạn không _expose_ hoặc _use_ bất kỳ tính năng nào của thư viện được tham chiếu, bạn sẽ không thể sử dụng nó. – Oded

+0

Đó là một giải pháp tốt, nhưng nó thực sự tạo ra một wrapper khi tôi không thực sự cần/muốn một. – Yossale

+0

Sau đó, bạn có thể cần phải tham khảo log4net trong tất cả các dự án cần nó. Nó làm cho sự phụ thuộc rõ ràng, và có lẽ là những gì bạn cần anyways. Sử dụng 'Globals' để chia sẻ mã và chức năng. – Oded

0

Hệ thống đó sẽ không hoạt động. Bạn sẽ phải thêm dll log4net làm tham chiếu cho tất cả các dự án. Hoặc tạo các lớp proxy, đó là nhiều công việc hơn.

0

Đọc trên GAC (Global Assembly Cache), đây là kho lưu trữ trung tâm cho các tệp DLL được chia sẻ qua các dự án ... đó là nơi tôi đặt tệp log4net DLL của mình. Sau đó bạn có thể chỉ cần thêm tham chiếu đến nó trong tệp .config của bạn mãi mãi dự án bạn cần phải sử dụng nó mà không cần thêm DLL cho các dự án.

Đây là nơi tốt để bắt đầu: MSDN: Working with the Global Assembly Cache

2

Tôi e rằng đó không phải là cách hoạt động. Bạn phải thêm DLL vào tất cả các dự án mà bạn muốn gọi nó.

Nếu bạn chỉ sử dụng một vài hàm trong DLL, bạn có thể tạo các hàm trong dự án Globals của bạn để gọi đến nó.

2

log4net không 'sống' trong Globals chỉ đơn giản bằng tham chiếu.

Độ nghiêng đầu tiên của tôi sẽ là có tất cả các dự án của bạn chỉ tham chiếu log4net, nó làm rõ rằng có một sự phụ thuộc không cần phải ẩn nó trong một dự án khác.

Tuy nhiên, nếu bạn có logic chung được chia sẻ trên các lớp, bạn có thể có lớp "Chung" hoặc "Chung" bao gồm tham chiếu đến thư viện được chia sẻ. Để tham khảo các thư viện đó, chỉ cần thêm việc sử dụng không gian tên đích.

Nói cách khác, bất kể tham chiếu nằm trong cùng một dự án hay một dự án tham chiếu khác, câu lệnh sử dụng sẽ giống nhau.

Đối với log4net tôi tin rằng nó chỉ nên là:

using log4net; 

Một cách khác để thêm tài liệu tham khảo phù hợp sẽ được gõ một trong những tên lớp somwhere trong mã của bạn (Logger?) Và sau đó gọi helper menu có "CTRL +". hoặc đơn giản là mở rộng nó, điều này sẽ có tùy chọn để thêm câu lệnh sử dụng thích hợp.

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