2009-11-21 30 views

Trả lời

81

Sử dụng hành động hậu xây dựng trong dự án của bạn và thêm các lệnh để sao chép DLL vi phạm. Hành động hậu xây dựng được viết dưới dạng tập lệnh theo lô.

Thư mục đầu ra có thể được tham chiếu là $(OutDir). Thư mục dự án có sẵn dưới dạng $(ProjDir). Hãy thử sử dụng các đường dẫn tương đối nếu có, để bạn có thể sao chép hoặc di chuyển thư mục dự án của mình mà không vi phạm hành động sau khi xây dựng.

+18

Cũng đáng để chỉ ra rằng anh ấy có thể đặt sự kiện sau xây dựng thông qua Project> Properties> Build Events> Post-Build Event. –

+0

Hoạt động! :) cảm ơn bạn! – Mat

+19

mẫu: http: //eyeung003.blogspot.com/2009/11/visual-studio-post-build-event-to-copy.html – AntonioR

5

(Câu trả lời này chỉ áp dụng cho C# không C++, xin lỗi tôi không nhận định câu hỏi ban đầu)

Tôi đã có qua địa ngục DLL như thế này trước đây. Giải pháp cuối cùng của tôi là lưu trữ các DLL không được quản lý trong DLL được quản lý dưới dạng tài nguyên nhị phân và trích xuất chúng vào một thư mục tạm thời khi chương trình khởi chạy và xóa chúng khi nó được xử lý.

nên là một phần của cơ sở hạ tầng .NET hoặc pinvoke, vì nó hữu ích .... . Một khi bạn làm điều này, bạn không phải lo lắng về các sự kiện sau khi xây dựng.

UPDATE:

tôi gửi mã ở đây trong câu trả lời khác https://stackoverflow.com/a/11038376/364818

+0

Tôi đồng ý, nó phải là một phần của khuôn khổ (để liên kết tĩnh dll, v.v.) - Đáng chú ý, lưu trữ dll như một tài nguyên và sau đó giải nén nó trong thời gian chạy có thể gây ra các vấn đề trong một số môi trường doanh nghiệp (đặc biệt là nếu chúng có phần mềm chống virus chủ động tương đối). – BrainSlugs83

6

Các chi tiết trong phần ý kiến ​​ở trên đã không làm việc cho tôi (VS 2013) khi cố gắng sao chép các dll đầu ra từ một C++ Dự án thư mục giải phóng và gỡ lỗi của một dự án C# khác trong cùng một giải pháp.

Tôi phải thêm bản dựng sau đây (nhấp chuột phải vào dự án có đầu ra .dll) sau đó thuộc tính -> thuộc tính cấu hình -> sự kiện xây dựng -> sự kiện sau xây dựng -> dòng lệnh

bây giờ tôi bổ sung thêm hai dòng sau để sao chép các dll ra vào hai thư mục:

xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Release 
xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Debug 
31

$ (OutDir) hóa ra là một đường dẫn tương đối trong VS2013, vì vậy tôi đã phải kết hợp nó với $ (ProjectDir) để đạt được hiệu quả mong muốn:

xcopy /y /d "$(ProjectDir)External\*.dll" "$(ProjectDir)$(OutDir)" 

BTW, bạn có thể dễ dàng gỡ lỗi các tập lệnh bằng cách thêm 'echo' ở đầu và quan sát văn bản mở rộng trong cửa sổ đầu ra xây dựng.

+11

'$ (OutDir)' là đường dẫn tuyệt đối trong Bản cập nhật cộng đồng VS2013 của tôi 4 ... –

+0

$ (TargetDir) có thể thay thế $ (ProjectDir) $ (OutDir) vì nó là sự kết hợp của cả hai. – person27

+0

Trong trường hợp của tôi mà không có/d nó đã ném một lỗi truy cập bị từ chối. Nhưng/d theo tài liệu là cho ngày. Không chắc chắn kết nối là gì. –

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