2009-03-11 38 views
6

Giả sử tôi có dự án C# Winforms, MainGUI.VS2008.NET: Nhận phụ thuộc của dự án được tham chiếu để sao chép vào thư mục bin của dự án chính

Tham chiếu một dự án khác trong cùng một giải pháp, ControlsLib.

ControlsLib tham chiếu đến bộ kiểm soát của bên thứ ba, chẳng hạn như điều khiển Infragistics hoặc Telerik và hiển thị bộ điều khiển người dùng được sử dụng trong MainGUI.

Sao chép cục bộ được đặt thành true trên tất cả các tham chiếu trong ControlsLib và tất cả các tệp DLL của bên thứ ba xuất hiện trong ControlsLib \ bin \ release.

Tuy nhiên tôi không thể có được bữa tiệc DLL thứ ba để sao chép tự động để MainGUI \ bin \ phát hành, đó là thư mục mà từ đó trình cài đặt của phần mềm được tạo ra (trong trường hợp này sử dụng NSIS)

Do đó DLL kiểm soát của bên thứ ba không được bao gồm trong tiến trình cài đặt, dẫn đến một FileNotFoundException khi chạy khi các điều khiển từ ControlsLib phụ thuộc vào các DLL của bên thứ ba được sử dụng.

Có cách nào "thích hợp" để thực hiện việc này mà tôi không biết? Trước đây tôi đã chỉ xử lý này trong một kịch bản xây dựng nant bằng cách sao chép các tập tin xung quanh, nhưng tôi đang bắt đầu một dự án mới và tôi chỉ muốn kiểm tra.

Cảm ơn

Trả lời

2

Tôi vừa giải quyết điều này bằng cách thêm các bài sự kiện xây dựng dòng lệnh sau vào file csproj cho MainGUI (các thuộc tính dự án -> xây dựng sự kiện)

copy $(SolutionDir)ControlsLib\bin\$(ConfigurationName)\Infragistics2*.dll $(TargetDir) 

Tôi đã không nhận ra rằng việc đó thực sự dễ dàng đến vậy ...

0

Bạn sẽ cần phải thêm một liên kết đến các tập tin cần thiết từ các dự án giao diện người dùng (MainGUI) và đặt chúng vào sao chép vào thư mục đầu ra từ . Các công cụ đóng gói sẵn có làm (IIRC) xếp thứ tự một cách chính xác, nhưng đối với các công cụ bên ngoài, tôi mong bạn sẽ cần phải thực hiện thủ công. Trên máy chủ xây dựng của tôi, tôi sử dụng tập lệnh điều tra tài liệu tham khảo và thêm vào tất cả các tham chiếu con cháu ngay trước khi nó được xây dựng (bằng cách chỉnh sửa tệp csproj dưới dạng xml) ... mã không tốt, nhưng nó công việc.

0

Tôi đã gặp sự cố tương tự khi sử dụng Gentle.NET (O/R Mapper). Một trong các DLL từ chối sao chép. Tôi đã điều tra hàng giờ và không thể tìm ra lý do. Tất cả các tệp khác đang được sao chép, nhưng R THNG một tệp bị loại trừ vì một số lý do kỳ lạ. Nhẹ nhàng sử dụng ba tệp DLL, Gentle.Common.DLL, Gentle.Framework.DLL và Gentle.SQLProvider.DLL. Người cuối cùng không bao giờ được sao chép.

Cuối cùng tôi chỉ đơn giản là tạo ra một kịch bản ...

0

Nếu bạn sửa đổi thuộc tính dự án chính (thuộc tính thực thi) trên tab Xuất bản, tùy chọn Tệp ứng dụng, bạn sẽ có thể thông báo cho VS để bao gồm tất cả các tệp không được sao chép.

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