2010-02-18 42 views
16

Tôi có một giải pháp C# và bao gồm nhiều dự án.C# câu hỏi tham khảo dự án

Tôi có một dự án là hội thảo của tôi chứa tất cả thông tin chung mà các dự án khác sử dụng. Tất cả các dự án khác có tham chiếu đến baseassemblies.

Tôi đã thêm một tham chiếu dll vào các bản sao lưu của mình, tuy nhiên tất cả các dự án khác không thể xem được.

Làm cách nào để tôi có thể tạo các dự án khác để xem DLL mà baseassemblies đang tham chiếu? Tôi không muốn phải thêm DLL cho tất cả các dự án kể từ khi đánh bại mục đích của dự án baseassemblies của tôi.

Trả lời

23

Cách tiếp cận chính xác là dành cho các hội đồng khác của bạn KHÔNG cần tham chiếu đến DLL khác đó. Cách để làm điều đó một cách chính xác, là không có các hội đồng cơ sở của bạn phơi bày bất kỳ loại nào nằm trong DLL đó. Quấn tất cả các chức năng mà bạn cần trong các hội đồng cơ sở, và đảm bảo rằng bất cứ ai tiêu thụ các hội đồng cơ sở của bạn, KHÔNG cần kiến ​​thức về các hội đồng cơ sở của dll cơ bản đang sử dụng. Nếu không, mỗi dự án sẽ tham khảo các hội đồng cơ sở của bạn, nếu họ cần phải sử dụng một cái gì đó có trong dll đó, họ sẽ phải tham chiếu nó.

+2

+1 bạn đánh bại tôi.Tôi đồng ý 100% –

+2

Điều này là không thực tế trong nhiều trường hợp với mã số lớn. Đó là một câu trả lời "lý thuyết" tốt, nhưng nó đòi hỏi rất nhiều nỗ lực trong việc viết mã và thử nghiệm để làm cho nó xảy ra (thường) không có giá trị gia tăng. Tôi không nói nó là * không bao giờ * thích hợp tất nhiên ... –

9

Không có tham chiếu chuyển tiếp trong .NET. Nếu một assembly cần tham chiếu đến một assembly khác thì nó phải thực hiện trực tiếp, nó không thể "kế thừa" tham chiếu đó từ một tham chiếu khác.

Lưu ý, một dự án chỉ cần tham khảo các hội đồng trực tiếp sử dụng các loại từ đó. Nếu A sử dụng B, và B sử dụng C, nhưng A không trực tiếp sử dụng C, thì A chỉ cần tham chiếu B trực tiếp (bộ nạp sẽ xử lý B tham chiếu C).

3

Tóm lại, bạn không thể làm điều đó. Bạn cần phải thêm một tham chiếu đến DLL chứa mã bạn đang cố gắng sử dụng nếu không nó sẽ không thể nhìn thấy nó.

Đề xuất của tôi là tạo một lớp trong dự án 'BaseAssemblies' của bạn mà bạn có thể truy cập từ ứng dụng của bạn về cơ bản tạo kiến ​​trúc theo tầng.

dụ

Application Layer - Sử dụng IDataClass
Business Logic Layer - Định nghĩa IDataClass
Data Access Layer - MyRawDataClass (thực hiện IDataClass)

Từ ví dụ này, các lớp ứng dụng chỉ cần có một tài liệu tham khảo đến BAL để có thể tương tác với DAL.

0

Bạn có thể có các giao diện xuất của BaseAssemblies phải được thực hiện bởi dll "khác" của bạn. Ngoài ra, BaseAssemblies của bạn cần một số chức năng "nhà máy lớp" cho các lớp đó.

0

Các áp phích khác là chính xác: bạn không thể làm điều đó. Đây là, IMHO, thảm hại trên một phần của Visual Studio. "làm cho" xử lý này sạch như chiếc bánh 20 năm trước ...

0

Có trường hợp dự án của bạn đề cập đến A lần lượt đề cập đến B nhưng khi bạn xây dựng, B không phải lúc nào cũng có trong thư mục BIN và bạn chỉ nhận ra điều này khi mã đang chạy. Có một câu hỏi SO có liên quan HERE. Mọi người đã giải quyết nó theo những cách kỳ lạ, nhưng tôi đặc biệt thích giải pháp của John Hunter. Điều này SO thread cũng thảo luận về một giải pháp mà bạn sử dụng các sự kiện xây dựng để đạt được kết quả mong muốn.

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