2013-07-22 66 views
5

Tôi đã theo cấu trúc dự án trong VSSNuGet không nhận được gói thiếu

enter image description here

Bây giờ trong Visual Studio 2010 Pro: tôi mở Solution2 và sau đó thêm library1 như dự án bên ngoài.

Library1 đang tham chiếu hai thư viện bên ngoài mà tôi nhận được qua NuGet. Khi tôi xây dựng Solution2 của tôi tất cả đều hoạt động tốt. Vì vậy, tôi đã đăng ký tất cả dự án của mình.

Vấn đề: Khi một nhà phát triển khác nhận được Solution2 từ nguồn và xây dựng, nó cho biết Library1 thiếu các thư viện bên ngoài.

Cố gắng sau:

1: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Vì vậy, bây giờ tôi đã .nuget thư mục dưới Solution2 mà được checked-in. Nhưng điều đó vẫn không mang dll.

Nghi ngờ của tôi là Library1 nằm trong một giải pháp riêng biệt đang gây ra sự cố này.

Bất kỳ ý tưởng nào về cách tự động nhận các gói bị thiếu thông qua NuGet?

Cập nhật:
gợi ý Xavier đã giúp và đây là hai bài đăng trên blog của mình:

Trả lời

5

Với thiết lập hiện tại của bạn, bạn nên chắc chắn rằng bạn có bật NuGet Package Restore trên cả hai giải phápSolution2 nuget.targets nên trỏ lệnh nuget install vào Solution1\Packages outputdirectory. cấu trúc thư mục của bạn sẽ trông như thế này:

Folder structure

Lý do: các tài liệu tham khảo Library1.csproj đang trỏ đến Solution1 \ Packages địa điểm. Khi thêm dự án này vào Solution2, các tham chiếu dự án không được thay đổi, nhưng giải pháp sẽ khôi phục các gói trong Solution2 \ Packages thay vì Solution1 \ Packages.

Nếu bạn đã cài đặt các gói trong các dự án của Solution2, bạn sẽ cần đảm bảo rằng các gói đó vẫn khôi phục lại Solution2 \ Packages. Để làm điều đó, tôi khuyên bạn nên đặt thuộc tính MSBuild trong các tệp dự án được chia sẻ (phía trên câu lệnh nhập cho tệp nuget.targets) và chuyển giá trị thuộc tính MSBuild này vào RestoreCommand.

Ví dụ::

<PackagesOutDir> $ (SolutionDir) .. \ Libraries \ Packages </PackagesOutDir >

Và điều chỉnh tập tin nuget.targets, ví dụ:

< PackagesOutDir Điều kiện = "$ (PackagesOutDir) == ''" > $ (SolutionDir) \ Gói </PackagesOutDir >

...

<RestoreCommand> ... -o "$ (PackagesOutDir)" </RestoreCommand >


Tùy chọn, Nếu bạn muốn sử dụng một thư mục Packages đơn , bạn có thể sửa đổi cả hai tệp.nuget\NuGet.targets và đặt khóa chuyển đổi -o (hoặc -OutputDirectory) cho lệnh nuget install.

Phụ thêm này để các yếu tố RestoreCommand: -o "$ (SolutionDir .. \ Packages" sẽ đảm bảo tất cả các gói được phục hồi ở một vị trí duy nhất:

enter image description here

Lưu ý rằng bạn sẽ có cập nhật thủ công các tham chiếu gói đã cài đặt mỗi lần bạn cài đặt gói NuGet sau khi thực hiện việc này!

+0

Xavier, tôi đã bật Khôi phục trên cả hai giải pháp và có cùng cấu trúc chính xác mà bạn đã đề cập với .nuget và thư mục gói trong mỗi giải pháp. Tôi chỉ bao gồm tập tin repositories.config trong gói thư mục mặc dù. Trên máy cục bộ của tôi nó hoạt động tốt nhưng khi một nhà phát triển khác lấy Solution2 từ VSS, chỉ dự án Library1 được tìm nạp chứ không phải thư mục gói. Tôi sẽ chơi một chút với .targets. Cảm ơn. – gbs

+0

Nói đúng ra, thư mục Packages không cần phải cam kết (mặc dù tôi cũng muốn có tệp repositories.config trong VCS). Phiên bản nuget.exe nào đang được sử dụng trong thư mục .nuget? bạn có thể cập nhật nó lên phiên bản mới nhất bằng cách sử dụng "nuget.exe update -self". Ngoài ra, bạn đang sử dụng TFS? Nếu vậy, ánh xạ vùng làm việc có chính xác không? –

+0

NuGet Ver 2.6.4. Tôi đang sử dụng VisualSourceSafe. Một điều tôi nhận thấy khi tôi mở Solution2, các gói cần thiết cho Library1 được cài đặt trong thư mục Solution2/packages nhưng Library1 không thể tải chúng. – gbs

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