2009-06-12 33 views
6

Bản sao - câu hỏi chính xác này được hỏi here - giải pháp duy nhất có vẻ là sự kiện xây dựng bài đăng.Visual studio đệ quy Sao chép địa phương

Trong Visual Studio 2008, tôi có các dự án sau:

  • A - tài liệu tham khảo B

  • B - tài liệu tham khảo Lib.dll

Khi B được xây dựng, Lib .dll xuất hiện trong B/bin/Debug. (điều này là ok)

Khi A được xây dựng, B.dll xuất hiện trong A/bin/Debug, nhưng Lib.dll KHÔNG xuất hiện trong A/bin/Debug. Sẽ không phải là hành vi hợp lý để sao chép tất cả các phụ thuộc của B vào đường dẫn đầu ra của A, vì B sẽ cần các assembly này trong thời gian chạy không? Có phải là không?

Tất cả các tham chiếu đều có copylocal = true.


(Bây giờ tôi phải tham khảo phụ thuộc tất cả của B từ A bằng tay, là có đúng không? Tôi cũng có thể sử dụng một bước tùy chỉnh xây dựng tôi đoán. Dù sao, không hành vi này có bất kỳ ưu điểm/ý nghĩa?)

+0

bạn đang làm việc với studio trực quan nào? –

+0

Tôi đang sử dụng VS 2008. Tôi tin rằng nó hoạt động theo cùng một cách trong năm 2005/2010 quá. –

+1

đã gửi một mục trên kết nối, fwiw: https://connect.microsoft.com/VisualStudio/feedback/details/694561/copy-local-private-true-private-on-a-project-reference-nhu cầu-tới-cũng-copy-những gì-mục tiêu-dự án-nhãn-như-copy- Địa chỉ –

Trả lời

5

Điều này chỉ hoạt động nếu lắp ráp thực sự được tham chiếu bởi .dll. tức là nếu bạn có LibInterface.dll và LibImplementation.dll - và mã của bạn trong A chỉ tham khảo các lớp trong LibInterface.dll, không có cách nào để có được LibImplentation.dll vào đầu ra cho B (sạch).

Điều này cũng áp dụng cho bất kỳ tệp phòng hộ - nghĩa là nếu bạn có Randon.myFile liên quan đến dự án A, đây sẽ là quy trình mong muốn: 1. Thêm dưới dạng bản sao cục bộ hoặc xây dựng sự kiện cho dự án A tăng đầu ra cho dự án A) 2. Trong Dự án B, thiết lập "sao chép cục bộ" trên dự án A ref. 3. Sau đó bạn sẽ nhận được tất cả mọi thứ trong đầu ra của dự án A trong dự án B (bao gồm cả tệp của bạn) - nhưng bạn thì không.

Có thể có một số tùy chọn khác - "Sao chép địa phương - tất cả" hoặc gì đó. Điều này sẽ giúp VS hỗ trợ kỹ thuật IOC và làm sạch trừu tượng.

0

Tôi đã thực hiện quy trình tương tự nhiều lần và không cần phải tham khảo lại các hội đồng tham chiếu theo cách thủ công. Một cách dễ dàng để kiểm tra điều này là:

  1. tham khảo B A
  2. Tạo một thể hiện của một đối tượng từ B trong A.
  3. Compile.

Nếu quá trình xây dựng hoàn tất thành công, mọi thứ đều được tham chiếu OK.

+0

Việc xây dựng hoàn thành thành công, nhưng khi chạy, instatiation của đối tượng từ B trong A kết thúc bằng ngoại lệ "Không thể tải loại hoặc lắp ráp", vì đối tượng đó từ B sử dụng các đối tượng từ Lib.dll, không có trong GAC hoặc thư mục hiện tại . –

+0

... có cùng một vấn đề. Dường như nó có liên quan đến thông tin phiên bản ngay cả khi phiên bản cụ thể được đặt thành false – Beachwalker

0

Nếu Lib.dll là một dll interop thì dll cơ bản của nó sẽ không được sao chép. Khác hơn rằng tôi muốn nói có thể có lỗi nhà điều hành bởi vì bạn chắc chắn không cần phải tham khảo một cách thủ công các hội đồng quản lý phụ thuộc.

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