2013-04-03 28 views
7

Tôi có một giải pháp có chứa một dự án DLL C++, và một dự án C# sẽ sử dụng DLL này (bằng cách sử dụng PInvoke).Làm cách nào để tham chiếu chính xác một dll trong Visual Studio 2010?

Dll đang được xây dựng vào thư mục x64/Release trong thư mục giải pháp của tôi, điều này có ý nghĩa, bởi vì như vậy dự án C# không phải poke vào thư mục của dự án DLL.

Tôi tự hỏi điều gì sẽ là cách chính xác để tham chiếu ngay bây giờ. Ngay bây giờ, dự án DLL là một sự phụ thuộc của dự án C#. Trực giác của tôi nói với tôi rằng điều đó cần phải là đủ, nhưng dự án C# nói rằng nó không thể tìm thấy DLL.

Tôi có nên chỉ thêm tệp .dll làm tham chiếu không? Tôi nghĩ rằng điều này có thể làm việc ngay bây giờ nhưng phá vỡ mọi thứ trong thời gian dài khi cài đặt dự án có thể thay đổi xung quanh.

+0

Mã C++ DLL có được quản lý không? – WhozCraig

+0

@WhozCraig: Anh ấy nói anh ấy đang sử dụng P/Invoke - nó phải không được quản lý. –

+0

Vâng, tôi chỉ thấy điều đó. duh. Tôi thực sự cần ngủ một chút. – WhozCraig

Trả lời

1

Thông thường trong các tình huống như vậy, tôi định cấu hình giải pháp của mình sao cho tất cả các dự án biên dịch thành $(SolutionDir)bin\$(Configuration). Các tệp nhị phân sau đó được định vị giống như trong chế độ sản xuất và các tệp DLL có thể dễ dàng được sử dụng.

Để giữ phiên bản mới nhất của DLL, hãy nhớ rằng bạn có thể đặt phụ thuộc, nếu có bất cứ điều gì thay đổi trong DLL, nó sẽ được xây dựng lại trước khi xây dựng assembly/ứng dụng của bạn.

Tuy nhiên, một cách khác là sử dụng các sự kiện xây dựng (prebuild và postbuild) để sao chép tệp DLL của bạn vào thư mục thích hợp.

1

Bạn không thể thêm DLL không được quản lý làm tham chiếu trong dự án được quản lý. DLL cần phải nằm trong thư mục thực thi hoặc trong bất kỳ thư mục nào khác của PATH của hệ thống.

Cách tốt nhất là sử dụng "Sự kiện xây dựng bài đăng" để có VS sao chép tệp DLL vào thư mục nơi cần thiết mỗi khi được xây dựng lại.

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