2016-03-15 19 views
36

Tôi có giải pháp .net với khoảng 30 dự án, tất cả đều nhắm mục tiêu .Net Framework 4.5. và mỗi tham chiếu ít nhất 3-4 gói NuGet.Nuget nhắm mục tiêu lại sau khi nâng cấp từ .Net Framework 4.5 lên 4.6.1

Hiện tại chúng tôi cần cập nhật chúng lên .Net Framework 4.6.1. Vì vậy, đây là những gì tôi cần biết:

  1. Tôi có cần phải nhắm mục tiêu lại gói NuGet hay không hoặc tôi có thể bỏ qua vì đây sẽ là bản nâng cấp 'tại chỗ' không?
  2. Nếu có, tôi có thể cập nhật tệp packages.config cho từng dự án bằng cách thay thế targetFramework = "net45" bằng targetFramework = "net461" cho mỗi gói NuGet không? Tôi đã nhìn thấy một vài đề xuất gỡ cài đặt và sau đó cài đặt lại gói thông qua lệnh 'update-package'. Tôi đã thử hôm nay nhưng tôi đã kết thúc với một vài lỗi.
+1

Sửa đổi targetFramework trong file packages.config đã không ảnh hưởng đến các hội đồng được tham chiếu trong dự án, giả sử bạn là không sử dụng tệp .xproj, do đó, thực hiện điều đó sẽ không phải là thay đổi chính xác. Tôi đoán rằng không có nhiều gói NuGet có các assembly rõ ràng nhắm mục tiêu .NET 4.6 vì vậy tôi nghi ngờ rằng không có gì cần phải được nhắm mục tiêu lại. Bạn sẽ có thể xem lại các thư mục lib của các gói NuGet của bạn để xem chúng nhắm mục tiêu gì. –

+0

Vì vậy, tôi đã kết thúc nâng cấp 75% các gói NuGet lên phiên bản mới nhất của mình. Đăng nâng cấp thuộc tính targetFramework được tự động đặt thành 'net461' cho hầu hết các gói. Có một số gói mà tôi sẽ được nâng cấp sau này và họ dường như làm việc tốt sau khi nâng cấp. Cảm ơn. – Vishal

+0

nâng cấp từ 4.5. * Lên 4. * sẽ hoạt động được thiết kế: https://msdn.microsoft.com/en-us/library/ff602939% 28v = vs.110% 29.aspx – OzBob

Trả lời

57

Các gói sẽ không được tự động nhắm mục tiêu lại, nhưng có một bản sửa lỗi tự động cho việc này.

Trong Package Manager Console chỉ cần chạy:

Update-Package -Reinstall 

Điều này sẽ buộc người quản lý gói để cài đặt lại tất cả các gói trong mỗi dự án (mà không thay đổi phiên bản của gói tham chiếu).

Bằng cách cài đặt lại các gói sau khi khung công tác mới được nhắm mục tiêu, điều này sẽ thay đổi tất cả các tham chiếu đến phiên bản chính xác.

Bạn cũng có thể chạy này chống lại một dự án duy nhất với:

Update-Package -Reinstall -ProjectName Project.Name.Here 

Tôi đã sử dụng kỹ thuật này nhiều lần để sửa chữa các vấn đề tham khảo NuGet.

+9

Một nhận xét để làm điều này nhanh hơn một chút. Thêm -IgnoreDependencies: 'Update-Package -Reinstall -IgnoreDependencies' – kenhundley

11

1 Tìm tất cả các file csproj và thay thế

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> 

với

<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> 

2 Mở Package Manager Console và chạy

Update-Package -Reinstall -IgnoreDependencies 

4 Tìm tất cả các giải pháp sau đó MSBuild mỗi một.

+0

BướC# 3 cũng nên tự động xử lý bướC# 2 cho _packages.config_. –

+0

@RayVega hãy giải thích thêm một chút. Bạn có thể chỉnh sửa và hiển thị như thế nào? – OzBob

+1

Nếu tôi bỏ qua bướC# 2 nhưng thay vì thực hiện bướC# 3 ngay sau bướC# 1, tất cả các thuộc tính _packages.config_ 'targetFramework' _automatically_ được sửa đổi để khớp với 'TargetFramework' mới của csproj. Ít nhất, đó là cách nó làm việc cho tôi bằng cách sử dụng nuget.exe phiên bản 4.3.0.440 và nâng cấp từ 4.5 -> 4.7. Về cơ bản, nó đã lưu một số công việc cho tôi bằng cách không phải tự sửa các tệp gói đó cho từng dự án. –

0

Cố định bằng cách sử dụng -

Update-Package -reinstall

enter image description here

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