2012-04-11 38 views
83

Nhóm của tôi đã sử dụng tùy chọn Bật gói khôi phục kể từ Nuget 1.5 để giữ các gói khỏi kiểm soát nguồn của chúng tôi. Khi Nuget 1.6 được phát hành, chúng tôi nhận thấy một vấn đề mà nó không kéo các gói xuống và theo dõi nó xuống Nuget.exe trong thư mục .nuget cần thiết để cập nhật lên 1.6 để phù hợp với Trình quản lý gói.Có cách nào để tự động cập nhật nuget.exe trong thư mục .nuget khi sử dụng khôi phục gói không?

Cách tốt nhất để cập nhật giải pháp khi Nuget đã được nâng cấp? Tôi không thấy một cách dễ dàng từ studio để biết phiên bản của nuget nằm trong thư mục giải pháp. Cho đến nay, chúng ta sẽ xóa thư mục .nuget và chạy lại lệnh Enable Package Restore.

Trả lời

128

tôi sẽ đề nghị cập nhật .nuget \ nuget.exe với lệnh này từ dòng lệnh:

nuget.exe update -self 

[EDIT]: Đóng VS Giải pháp đầu tiên. Nếu có bản cập nhật và giải pháp được mở, nuget.exe sẽ bị xóa khỏi giải pháp.

Bạn có thể tự động cập nhật nuget.exe trên khôi phục bằng cách sửa đổi .nuget \ nuget.targets để thêm lệnh trên. Tôi sẽ xem xét lệnh khôi phục trong đó làm ví dụ. Nhưng tôi không chắc chắn nếu nó có giá trị nó, cập nhật nuget.exe không phải là phổ biến, và khả năng tương thích ngược nên phá vỡ rất hiếm khi.

+0

Tôi cố gắng này trên một trong những dự án của tôi. Nó cập nhật NuGet.exe nhưng nó dường như đã loại bỏ nó khỏi giải pháp của tôi. Tôi biết tôi có thể thêm nó trở lại, nhưng điều đó có vẻ kỳ quặc. – Rick

+0

Vâng, tôi đã thử cập nhật thực sự lần này và nuget.exe đã bị xóa khỏi giải pháp VS cho tôi. (Tôi đã không nhận được rằng trước đây kể từ khi nuget.exe đã được cập nhật). Điều này xảy ra vì trong quá trình cập nhật, nuget.exe hiện tại được chuyển đến nuget.exe.old đầu tiên để tham chiếu tệp bị hỏng. Tôi nghi ngờ điều này sẽ được cố định, tôi sẽ chạy lệnh với giải pháp đóng lại. –

+0

Ok sẽ làm, nhờ sự giúp đỡ. – Rick

31

Tôi đã tìm thấy cách tốt nhất để xử lý việc này là chỉ cần xóa thư mục .nuget và kích hoạt lại gói giải pháp rộng. Như đã nói ở trên, bạn có thể thêm lệnh tự cập nhật vào bản dựng của mình, nhưng điều đó sẽ không cập nhật mục tiêu hoặc tệp cấu hình nếu có thay đổi giữa các phiên bản (hoặc xóa tham chiếu khỏi giải pháp của bạn). Có lẽ nó không phải là lớn của một thỏa thuận, nhưng đây là cách lửa chắc chắn để đảm bảo rằng bạn có exe mới nhất và các tập tin cấu hình. Và vào cuối ngày, cập nhật chỉ là một vấn đề nếu bạn cần truy cập vào một lệnh mới hoặc cuối cùng là một sự thay đổi đột ngột trong một bản phát hành mới.

+3

+1 - Tôi đã nhận thấy rằng đây là cách tốt nhất để cập nhật tập tin 'NuGet.exe' * cũng như * tệp' NuGet.targets' (cũng quan trọng). Chỉ cần đảm bảo bạn lưu bất kỳ tùy chỉnh nào bạn đã thực hiện cho tệp 'NuGet.targets' (ví dụ: các gói tùy chỉnh) để bạn có thể áp dụng lại chúng cho tệp mới. –

+0

tuyệt vời mà làm việc cho tôi như quyến rũ !! thanks for the information – Gayan

-1

See David Ebbo's post at his blog

Về cơ bản, tất cả các bạn cần làm là tạo ra một tập tin NuGet.Config bên cạnh file sln của bạn, bao gồm:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <clear/> 
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" /> 
    </packageSources> 
</configuration> 
+0

Câu hỏi sẽ hỏi cách tự động cập nhật nuget.exe lên phiên bản mới nhất khi sử dụng khôi phục gói. Bài đăng của David Ebbo'sblog chỉ giải thích cách khôi phục các gói bằng nuget.exe. – Frith

+0

Bạn có lẽ nên xác định phần nào của câu hỏi bạn trả lời sau đó, khi nhìn vào tiêu đề của câu hỏi và câu trả lời được chấp nhận, thật dễ dàng để xem xét câu trả lời này bị thất lạc ... – Jens

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