Đây là sự cố không có câu trả lời rõ ràng, nhưng ...
Có hai đường dẫn bạn có thể thực hiện. Một hệ thống kết hợp mạnh mẽ hoặc một hệ thống kết hợp lỏng lẻo.
Đối với một hệ thống mạnh mẽ, tôi có thể đề xuất hai thư mục cho tệp nhị phân: thư mục bên thứ 3 và thư mục chứa các tệp DLL mà bạn xây dựng mà các nhà phát triển khác có thể tham khảo. Các bên thứ ba DLLs (bên ngoài công ty của bạn) nên được đặt trong kiểm soát nguồn để tất cả các nhà phát triển tham khảo cùng một phiên bản của bên thứ ba DLL từ cùng một vị trí này tránh máy phát triển không nhất quán và có vấn đề cài đặt phần mềm của bên thứ 3 trên mỗi máy. Các DLL trong nhà không nên được tham chiếu trong điều khiển nguồn và nên được xây dựng trên mỗi máy phát triển thông qua một tập tin batch xây dựng tự động hoặc tương tự. Trong bước xây dựng, bạn có thể sao chép tất cả chúng vào cùng một thư mục và miễn là các nhà phát triển có được quyền kiểm soát và xây dựng nguồn mới nhất, mọi người đều có cùng một DLL từ bên trong công ty của bạn.
Ví dụ, tải mới nhất, xây dựng (sử dụng tệp lô để xây dựng tất cả các dự án cần thiết), và sau đó làm bước đăng bài sao chép kết quả đầu ra thành phổ biến. Bây giờ tất cả các dự án khác của bạn có thể tham khảo các tệp DLL chung và DLL của bên thứ ba từ cùng một vị trí và mọi người đều nhất quán.
Vấn đề là các tham chiếu được ghép mạnh, do đó, các thay đổi đôi khi có thể có vấn đề nếu không được truyền đạt đúng cách.
Một hệ thống kết hợp lỏng lẻo sử dụng một khung như MEF (Khung mở rộng được quản lý) và các thành phần của bạn tham chiếu "DLL hợp đồng" xác định giao diện cho các thành phần của bạn.Dự án tham chiếu giao diện hoặc hợp đồng DLL và không thực sự quan tâm đến việc thực hiện và sau đó MEF quản lý các plugin cho bạn.
Trong trường hợp này, bạn tham khảo DLL giao diện nhưng không thực sự là DLL thực hiện.
Ví dụ: giả sử tôi có giao diện gọi là ILog với phương thức có tên LogMessage.
private ILog _logger;
_logger.LogMessage();
Vì vậy, trong trường hợp được ghép nối mạnh: Hành động.DLL tham chiếu Logger.DLL trực tiếp.
Trong trường hợp kết hợp lỏng lẻo Action.DLL tham chiếu ILog.DLL (chỉ giao diện). Logger.DLL triển khai thực hiện ILog.DLL. Nhưng Action.DLL không có tham chiếu đến Logger.DLL trực tiếp.
Bây giờ tôi có thể có bất kỳ số lượng tệp DLL nào ngụ ý giao diện ILog, nhưng Action.DLL không trực tiếp tham chiếu chúng. Đó là khá mát mẻ và một trong những tính năng thú vị hơn của MEF và khớp nối lỏng nói chung, khả năng không có phụ thuộc.
Cách bạn chọn, dù theo cách nào cũng được chấp nhận, tôi nghĩ ý tưởng được kết hợp lỏng lẻo phù hợp với kịch bản của bạn là tốt nhất vì các nhóm sẽ chỉ biết hợp đồng so với triển khai thực tế.
Tôi sẽ không có một hợp đồng DLL lớn, tôi sẽ thử và ngắt các giao diện thành các nhóm hợp lý. Ví dụ, đăng nhập có vẻ như một loại tiện ích của giao thoa, vì vậy tôi sẽ tạo ra một DLL hợp đồng tiện ích với một giao diện ILog. Cách chia nhỏ tùy thuộc vào những gì bạn đang cố gắng làm. Hoặc mỗi giao diện có thể là một hợp đồng DLL, nhưng có lẽ đó là một chút cực đoan.
Tôi sẽ có giao diện ổn định cho SDK của bạn. Khi bạn cần thay đổi giao diện, hãy phát triển giao diện mới và không sử dụng giao diện cũ, nhưng triển khai nó trong một khoảng thời gian. Tôi sẽ có mỗi dự án plugin xây dựng dựa trên SDK mới nhất. Tôi sẽ xem xét MEF hoặc tốt hơn cho tôi một công cụ DI như Autofac. – kenny
Có lẽ tôi thích phương pháp "làm việc với phiên bản ổn định nhất" và với NuGet, bạn có thể dễ dàng đóng gói SDK và các tệp hỗ trợ khác vào gói NuGet, có thể dễ dàng cài đặt vào Visual Studio và cập nhật gọn gàng! –
Tôi có thể triển khai các gói NuGet nội bộ trong công ty của chúng tôi không? có nghĩa là, cho phép người dùng khác lấy thông tin cập nhật mới nhất mà không lộ mã của chúng tôi công khai? –