2011-12-19 60 views
5

Tôi đã làm việc trên một dự án và khi được trồng, tôi nhận ra rằng hai phần không thể nối với nhau là phụ thuộc lẫn nhau.hội đồng csc.exe và phụ thuộc vào nhau

Hãy gọi hai phần này là a.exe và b.dll. b.dll cung cấp một triển khai cho phép a.exe truy xuất dữ liệu, nhưng tôi muốn nó được lắp ráp độc lập của riêng nó để nó có thể dễ dàng được thay đổi để làm cho giao tiếp a.exe với các nguồn dữ liệu khác nhau.

Tuy nhiên, trong khi a.exe là bắt buộc để tham chiếu b.dll, b.dll yêu cầu một số chức năng là một phần không thể tách rời của a.exe.

Vì tôi đã biên soạn - để kiểm tra - vì tôi đã viết dự án này, a.exe và b.dll đều tồn tại và tôi có thể biên dịch b.dll với a.exe và a.exe chống lại b.dll, nhưng làm thế nào tôi có thể xây dựng lại cả hai từ nguồn này?

+0

Bạn chưa nhận được lỗi phụ thuộc vòng tròn từ Visual Studio như thế nào? – Oded

+0

@Oded Anh ấy đang sử dụng trình biên dịch dòng lệnh - bạn có thể xây dựng lặp đi lặp lại điều này, và tạo phụ thuộc vòng tròn - nhưng nó làm cho nó trở nên không bao giờ làm được việc xây dựng lại hoàn toàn (không có khó khăn cực độ). –

+0

@ReedCopsey - Tôi nghĩ anh ấy có thể làm điều đó, nhưng muốn được OP xác nhận. Như bạn đã nói, việc xây dựng sạch sẽ là không thể trong kịch bản này. – Oded

Trả lời

2

Gọi csc.exe, dịch chương trình nguồn cho a.exe và b.dll vào a.exe, gọi csc.exe, co mpile nguồn cho b.dll vào b.dll và tham chiếu a.exe, và sau đó gọi csc.exe một lần cuối, biên dịch mã nguồn cho a.exe thành a.exe và tham chiếu b.dll.

4

Nói chung, nó sẽ là một ý tưởng tốt để cấu trúc lại điều này, và di chuyển các phụ thuộc chia sẻ vào lắp ráp của riêng họ (c.dll). Bằng cách này, cả a.exe và b.dll đều có thể tham khảo c.dll, và bạn tránh sự phụ thuộc vòng tròn này.

+0

Nếu tôi làm vậy, trong tình huống này, tôi chỉ có thể tưởng tượng c.dll sẽ phụ thuộc vào a.exe và b.dll. Chức năng không được tách riêng khỏi mã trong b.dll và a.exe. –

+1

@RobertAllanHenniganLeahy Mục tiêu của bạn nên tách biệt điều này. Hãy thử thiết kế API của bạn để nó được tách riêng. Không có lý do gì mà tất cả các loại nên phụ thuộc lẫn nhau. Bạn luôn có thể xác định một giao diện trong c.dll rằng a.exe hoặc b.dll thực hiện để cung cấp functionalitiy, hoặc sử dụng đại biểu, vv Thông tư phụ thuộc như thế này luôn luôn có thể được làm việc xung quanh ... –

+0

Tôi cho rằng tôi không thấy cần phải tránh sự phụ thuộc lẫn nhau chỉ để tránh nó, đặc biệt là khi các phương pháp bạn đề xuất có khả năng tăng độ phức tạp và kích thước và có khả năng làm giảm hiệu suất. Tôi figured một cách dễ dàng qua vấn đề này mặc dù - gọi csc.exe, biên dịch mã nguồn cho a.exe và b.dll thành a.exe, gọi csc.exe, biên dịch mã nguồn cho b.dll thành b.dll và tham chiếu a.exe, rồi gọi csc.exe lần cuối, biên dịch mã nguồn cho a.exe thành a.exe và tham chiếu b.dll. –

5

tôi sẽ cấu trúc lại hệ thống của bạn thành ba cụm:

  • a.exe - Main EXE gì nên tham khảo
  • b.dll này - Như bạn có nó ngày hôm nay, nhưng không tham khảo a.exe, nó tham chiếu c.dll
  • c.dll - Điều này nên chứa các mảnh common/bộ phận mà cả a và b cần phải tham khảo
+0

b.dll chỉ chứa một lớp - hãy gọi nó là DataSource - và a.exe chứa một thư viện các lớp, nhưng chỉ có một b.dll cần là lớp được gọi là Máy chủ, là thành phần chính của a.exe . –

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