2010-02-15 34 views
6

Có lẽ tôi đang thiếu một cái gì đó rõ ràng ở đây nhưng ...NET Dependencies hội

tôi đã xây dựng một chung C# thư viện lớp dự án tái sử dụng nói (A.dll) mà tham chiếu 3 cụm khác nói (B.dll, C .dll và D.dll)

Tuy nhiên nếu tôi muốn sử dụng lại thành phần A.dll trong một dự án khác, tôi vẫn phải bao gồm các tham chiếu đến B.dll, C.dll và D.dll.

Có cách nào bạn có thể cấu hình A.dll để xây dựng tất cả các phụ thuộc của nó vào A.dll vì vậy tôi không phải bao gồm 3 hội đồng khác không?

Cheers

+0

Có rất ít sự khác biệt giữa hội đồng vận chuyển 4 hoặc 1. Và với các hội đồng riêng biệt, bạn giữ tất cả phiên bản/ký còn nguyên vẹn. –

Trả lời

6

Có thể kết hợp lắp ráp, sử dụng công cụ ILMerge:

C:\Program Files\Microsoft\ILMerge\ILMerge.exe /target:library /out:abcd.dll a.dll b.dll c.dll d.dll" 

này sẽ hợp nhất dlls a, b, cd vào abcd.dll. Nó cũng sẽ hợp nhất các biểu tượng gỡ lỗi nhưng không hợp nhất các tài liệu XML.

Ngoài ra, bạn sẽ phải tham chiếu chính dll trong các dự án mới chứ không phải các dự án tương ứng. Một ngoại lệ cho điều này là nếu bạn hợp nhất các thư viện thành một tệp thực thi, trong trường hợp đó bạn có thể tham khảo các thư viện/dự án tương ứng bởi vì chúng sẽ được nạp với tệp thực thi.

Dự án Mono cũng có công cụ gọi là mkbundle.

Cũng có sẵn là ILRepack, nhằm mục đích tương thích với ILMerge, nhưng là FLOSS.

+0

Có, bạn có thể làm theo cách này. Nhưng bạn không nên (nói chung). –

+0

@ Henk Holterman: Tại sao không? – Bobby

+0

Bạn đang làm rối tung lên phiên bản và thông tin chữ ký. Để đạt được một nhận thức. –

0

Điều này sẽ giống như liên kết tĩnh của các tệp DLL hoạt động tốt với C++ gốc. Theo tôi biết bạn không thể liên kết tĩnh hội đồng trong mã NET, do đó bạn phải bao gồm tất cả các DLL.

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