2009-12-30 32 views
9

Khi xây dựng mã được quản lý Visual Studio một cách chính xác (và đệ quy) các bản sao của các dự án được quản lý được tham chiếu đến thư mục đầu ra của dự án đang được xây dựng. Tuy nhiên, nếu một trong những tham chiếu đó là DLL được quản lý phụ thuộc vào dlls không được quản lý thì các DLL không được quản lý này không được sao chép vào thư mục đầu ra, mặc dù các dự án tương ứng của chúng trong cùng một giải pháp và được liệt kê là phụ thuộc của quản lý DLL.Làm cách nào để hệ thống xây dựng Visual Studio hiểu được các phụ thuộc không được quản lý của các dll được quản lý?

Tôi nhận thấy rằng sự cố này có thể được giải quyết bằng cách có tất cả các dự án sử dụng cùng một thư mục đầu ra. Chúng tôi đã làm điều đó cho hầu hết các dự án, nhưng chúng tôi muốn giữ riêng các thư mục đầu ra thử nghiệm đơn vị, gây ra vấn đề trên cho các bài kiểm tra đơn vị sử dụng Dll được quản lý với các phụ thuộc không được quản lý. Các giải pháp chúng tôi đang sử dụng ngay bây giờ là một sự kiện trước khi xây dựng để sao chép các DLL cần thiết nhưng điều này lãng phí thời gian và dễ bị lỗi vì nó cần phải được lặp lại cho mọi dự án sử dụng DLL được quản lý. Do đó, tôi muốn biết nếu có một cách để có được hệ thống xây dựng để hiểu rằng nó luôn luôn nên sao chép các phụ thuộc không được quản lý của DLL được quản lý bất cứ khi nào nó quyết định sao chép DLL được quản lý không? Không.

Trả lời

5

Có một cách giải quyết khác là thêm nút khác vào dự án DLL được quản lý, đặt tên DLL không được quản lý và thiết lập Build Action = "None" và Copy to Output Directory = "Copy if Newer".

Edit: Đối với việc xây dựng một dự án C++/CLR, tôi nghĩ rằng điều này sẽ làm việc:

Thêm nút, và thiết lập công cụ xây dựng của nó để Tuỳ chỉnh Build Tool. Sau đó, trong trang Bước Tuỳ chỉnh xây dựng, thiết lập lệnh để copy $ (InputPath) $ (OutDir)Đầu ra để $ (OutDir) \ $ (InputFileName). Có vẻ như việc đó sẽ hiệu quả.

+0

Điều đó nghe có vẻ giống như một công việc tuyệt vời. Ít nhất nó được quản lý ở một địa điểm duy nhất theo cách này. Hãy thử nó ngay khi tôi có thời gian để đảm bảo nó hoạt động chính xác. Tuy nhiên, tôi vẫn quan tâm đến việc liệu có giải pháp hoàn toàn tự động hay không. – Ziphnor

+0

Tôi tin rằng giải pháp sẽ làm việc cho các dự án C# được quản lý. Tuy nhiên, dự án được quản lý trong kịch bản của chúng ta là một dự án CLR C++. Trong các dự án CLR C++ không có thuộc tính "Sao chép vào thư mục đầu ra" cho các mục dự án như trong các dự án C#. Có cách nào khác để chỉ định một hành động như vậy không? – Ziphnor

+0

@Ziphnor: Đã chỉnh sửa bài đăng của tôi để bao gồm một phương thức hoạt động với các dự án C++/CLR. – Tarydon

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