2012-11-27 9 views
8

Tôi có hai DLL không được quản lý trong một giải pháp, được gọi là A và B và A có tham chiếu đến B. Tôi muốn sao chép B.dll vào thư mục ứng dụng cho A. Khi tôi nhấp vào "Sao chép địa phương" trên tham chiếu trong tab "Khung và Tham chiếu" của A trong thuộc tính dự án của nó, có vẻ như nó được đặt thành true, nhưng nhấp vào áp dụng sẽ trả về giá trị thành false. Có ý tưởng gì ở đây không?Visual studio Sao chép cục bộ trên tài liệu tham khảo không hoạt động

+0

Rất không rõ ràng, bạn không thể thêm tham chiếu đến DLL C++ không được quản lý ở đó. –

+0

@HansPassant B là tham chiếu dự án đến A. –

+0

Điều đó yêu cầu trình liên kết liên kết tệp .lib được tạo bởi dự án B. Sao chép cục bộ chỉ có ý nghĩa cho các hội đồng .NET. Sao chép các tệp DLL bằng lệnh xcopy trong sự kiện xây dựng bài đăng. –

Trả lời

0

Tôi gặp vấn đề này trong khi quay lại. Về cơ bản, nó là đúng, do đó, nó sao chép các tập tin, và sau đó đặt chính nó để sai để giữ cho bản thân từ recopying nó.

0

@HoopSomuah Ngay cả khi bạn làm việc xung quanh lỗi kết nối và có cài đặt Sao chép cục bộ để dính, Visual Studio vẫn sẽ không sao chép libs hoặc dll phụ thuộc vào thư mục đích cho A, bất kể cờ bạn đặt trên tham chiếu tới B trong dự án A.

Xử lý tham chiếu không được quản lý trong Visual Studio 2015 vẫn còn bị hỏng và tôi chắc chắn năm 2017 cũng kém như nhau.

@JasonFry Như @HansPassant đã chỉ ra, bạn sẽ cần thêm sự kiện sau xây dựng vào dự án A để sao chép B.dll vào cùng thư mục với A.dll.

Visual Studio không cung cấp bất kỳ cách dễ dàng nào để lấy đường dẫn đến B.dll từ dự án A, vì vậy chúng tôi có thể tạo dự án B ghi đường dẫn đó tới tệp văn bản, và sau đó có dự án A đọc đường dẫn từ văn bản đó tập tin và sao chép B.dll vào cùng thư mục với A.dll.

mở các thuộc tính dự án cho B và thêm này như là một hậu sự kiện xây dựng:

echo $(TargetPath)>$(SolutionDir)References.txt 

trong các thuộc tính dự án A, thêm như là một hậu sự kiện xây dựng:

for /f %%f in ($(SolutionDir)References.txt) do xcopy /y %%f $(TargetDir) 

Nếu bạn có dự án thứ 3 C.dll cần phải được sao chép vào thư mục đầu ra của A, hãy thêm sự kiện post-build tương tự vào thuộc tính dự án cho C (chú thích >> thay vì > để nó gắn vào tệp ext thay vì ghi đè lên nó):

echo $(TargetPath)>>$(SolutionDir)References.txt