Cần cập nhật các công cụ chính của EF


142

Khi tôi sử dụng các công cụ dotnet ef trong Bảng điều khiển Trình quản lý Gói VS 2017, tôi nhận được thông báo cảnh báo về việc cần cập nhật các công cụ EF Core:

PM> dotnet ef migrations list -s ../RideMonitorSite

The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.2-rtm-30932'. Update the tools for the latest features and bug fixes.
20180831043252_Initial

Nhưng tệp csproj của tôi có mục nhập này:

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.1.2" />
  </ItemGroup>

Tôi đã xác nhận rằng phiên bản được cài đặt trên thực tế đã lỗi thời:

PM> dotnet ef --version
Entity Framework Core .NET Command-line Tools
2.1.1-rtm-30846

Vậy tôi phải làm gì để cập nhật các công cụ? BTW, tôi đã thấy trong các câu trả lời khác rằng tệp global.json lỗi thời có thể gây ra sự cố này. Nhưng tôi không có tệp global.json ở bất kỳ đâu trong giải pháp.


Tôi nghĩ bạn có thể xóa tham chiếu đến DotNetCliToolReference, github.com/aspnet/EntityFramework.Docs/issues/708
Antonio Campagnaro,

Thanx cho đề xuất, @AntonioCampagnaro. Nhưng khi tôi xóa các tham chiếu đó, tôi vẫn nhận được thông báo cảnh báo.
Mark Olbert,

1
Nâng cấp nó bằng cách gói Manager Console như câu trả lời này
Sebastian Ferrari

Câu trả lời:


282

Sử dụng dòng lệnh, Cmd hoặc PowerShell cho phiên bản cụ thể :

dotnet tool update --global dotnet-ef --version 3.1.0

hoặc để sử dụng phiên bản mới nhất (cũng hoạt động để cài đặt lại) :

dotnet tool update --global dotnet-ef


2
Tôi đã có phiên bản 3.0.0 và lệnh đầu tiên phù hợp với tôi, nhưng lệnh thứ hai thì không. Khi chạy lệnh whitout xác định bất kỳ phiên bản tôi đã nhận được lỗi sau: Công cụ 'DotNet-ef' thất bại trong việc cập nhật do sau đây: Các gói phần mềm công cụ không thể được phục hồi ...
Pippo46

65
Tại sao không thể họ chỉ cần đặt này TRÊN thông báo lỗi!
Simon_Weaver

1
chúng ta có lẽ nên thực hiện một cuộc pr vào một ngày nào đó ... @Simon_Weaver
Riscie


19

Tôi đã trao đổi vấn đề này với nhóm phát triển trên github . Hóa ra đây là một vấn đề đã biết trong các gói công cụ hoặc gói nuget hiện tại được tải khi bạn tạo một trang web AspNet Core được hỗ trợ bởi EF Core. Nó được nhắm mục tiêu sẽ được sửa trong một bản phát hành trong tương lai.

Hiện tại, cách giải quyết đơn giản là bỏ qua cảnh báo.

Một giải pháp khác cũng được đưa ra, liên quan đến việc điều chỉnh tệp csproj để xác định phiên bản của gói ẩn số AspNet Core một cách rõ ràng - nó lên đến 2.1.3 khi tôi đang viết bài này - nhưng tôi không thể làm cho cách tiếp cận đó hoạt động; Tôi vẫn nhận được thông báo cảnh báo.


12

Giải pháp phù hợp với tôi là chạy các lệnh sau trong Bảng điều khiển Trình quản lý Gói:

PM> Install-Package Microsoft.EntityFrameworkCore -Version 2.1.11
PM> Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.11

Đảm bảo rằng phiên bản khớp với phiên bản trong thông báo lỗi, trong trường hợp của tôi, tôi gặp lỗi sau:

The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.11-servicing-32099'. Update the tools for the latest features and bug fixes.

Kiểm tra các phiên bản có sẵn từ trang web sau: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/


11

Hãy thử cái này: Install-Package Microsoft.EntityFrameworkCore.Tools

Nếu sự cố vẫn xảy ra, sau đó thực hiện điều này cũng như: Cập nhật-Gói Microsoft.EntityFrameworkCore.Tools


3
Đây là một gợi ý tốt, nhưng không khắc phục được sự cố cho tôi.
Banoona

Đã cài đặt một gói bị thiếu cho tôi, đã giải quyết được một vấn đề thế hệ, nhưng cảnh báo vẫn còn. Dù bằng cách nào gợi ý tốt.
dyslexicanaboko

3

Giải pháp của tôi là cài đặt công cụ dotnet-ef từ microsoft https://www.nuget.org/packages/dotnet-ef . Nó sử dụng các lệnh tương tự nhưng không có cảnh báo. Thay đổi là sử dụng dotnet-ef thay vì dotnet ef.

Và nếu bạn đã cài đặt dotnet-ef thì hãy sử dụng dotnet tool update --global dotnet-ef --version n.n.n(nnn phiên bản của bạn để cập nhật lên)


2

Cài đặt phiên bản .NET Core SDK v2.1.401 mới và kiểm tra lại> dotnet ef --version. Tôi đã gặp vấn đề tương tự và trong trường hợp của tôi, điều đó đã hoạt động. Ngoài ra, bạn không cần thêm Microsoft.EntityFrameworkCore.Tools.DotNet.


Thanx, @surbaniak. Tôi đã làm điều đó. Hóa ra đây là một vấn đề đã biết với các gói nuget hiện tại và được nhắm mục tiêu để khắc phục. Cách giải quyết là chỉ cần bỏ qua vấn đề, vì (cố tình; chưa tự mình kiểm tra điều này) sẽ không bị mất chức năng.
Mark Olbert

Câu trả lời này cũng giúp tôi. Tôi đã cài đặt .NET Core SDK v2.1.403 (gần như cùng một phiên bản) và cảnh báo không hiển thị nữa. Bạn cần đảm bảo rằng cả .Net core SDK và runtime đều được cập nhật để tránh cảnh báo như vậy, rằng các phiên bản đã được cập nhật. Url được thay đổi cũng tại trang web của Microsoft, nhưng tôi đã sử dụng: microsoft.com/net/download/dotnet-core/2.1
Tore Aurstad

Tôi đã cài đặt .NET Core SKD v2.1.701 (dotnet-sdk-2.1.701-win-x64.exe) nhưng vẫn gặp lỗi.
Patee Gutee

2

Để giải quyết vấn đề này, bạn có thể làm theo một trong các kỹ thuật sau:


  • Kỹ thuật 1: Sử dụng Bảng điều khiển Trình quản lý Gói (Đặc biệt cho người dùng Microsoft Visual Studio)
    PM >Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.2

  • Kỹ thuật 2: Sử dụng .NET CLI
    >dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.1.2

  • Kỹ thuật 3: Sử dụng tham chiếu gói

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.2">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
  • Kỹ thuật 4: Sử dụng Packet CLI
    >paket add Microsoft.EntityFrameworkCore.Tools --version 2.1.2

Hãy nhớ: Để sử dụng phiên bản này, bạn cần NuGet 3.6 hoặc cao hơn.
Liên kết tham khảo: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/2.1.2


1
  • Bỏ qua vấn đề
  • Không cập nhật <PackageReferencelude = "Microsoft. EntityFrameworkCore. Tools" Version = "" /> của bạn
  • Trong trường hợp của tôi, tôi đã tiếp tục với 'Cập nhật-Cơ sở dữ liệu -Context MyElementContext' và bây giờ tất cả đều hoạt động tốt.

Tôi tìm thấy điều này trong cuốn sách 'Lập trình ASP.NET Core' của Dino Esposito.

'Lưu ý Phiên bản này của công cụ CLI không giống với phiên bản thời gian chạy .NET Core mà ứng dụng sẽ sử dụng. Phiên bản thời gian chạy được chỉ định trong dự án và bạn có thể thoải mái chỉnh sửa nó từ trong giao diện người dùng của IDE mà bạn chọn. Thay vào đó, nếu bạn muốn chỉnh sửa dự án theo cách thủ công, thì việc chỉnh sửa .csproj XML le và thay đổi giá trị của phần tử TargetFramework cũng dễ dàng như vậy. Giá trị đề cập đến biệt danh xác định phiên bản (chẳng hạn như netcoreapp2.0). '


0

Tôi không thể tìm thấy cách cập nhật gói cụ thể, nhưng trong Bảng điều khiển Trình quản lý Gói, tôi đã chạy 'gói cập nhật'. Nó chạy qua và cập nhật tất cả các gói được tham chiếu trong một dự án, bao gồm cả Công cụ lõi của EF. Điều đó có thể không lý tưởng cho bạn vì điều đó có thể cập nhật các gói bạn không muốn.


Thanx, @malckier. Tôi đã chạy gói cập nhật và nó đã cập nhật một số thứ. Nhưng thông báo cảnh báo vẫn xuất hiện.
Mark Olbert,

0

Làm theo các bước trong tài liệu này đã giúp tôi giải quyết vấn đề - https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-entityframework-core-scaffold-example.html

Xây dựng cơ sở dữ liệu bằng cách sử dụng bảng điều khiển trình quản lý gói trong Visual Studio

  • Mở Visual Studio và tạo Ứng dụng điều khiển mới (.NET Core) cho C #.
  • Thêm gói MySQL NuGet cho EF Core bằng Bảng điều khiển Trình quản lý Gói. Ví dụ: sử dụng lệnh sau để thêm gói MySql.Data.EntityFrameworkCore v8.0.13:

Gói cài đặt MySql.Data.EntityFrameworkCore -Version 8.0.13

Quan trọng

Phiên bản (ví dụ: -Version 8.0.13) phải khớp với phiên bản Connector / NET thực tế mà bạn đang sử dụng. Để biết thông tin phiên bản hiện tại.

  • Cài đặt các gói NuGet sau bằng cách chọn Bảng điều khiển Trình quản lý Gói hoặc Quản lý Gói NuGet cho Giải pháp từ Công cụ và sau đó chọn menu Trình quản lý Gói NuGet:

    Microsoft.EntityFrameworkCore.Design
    
    EF Core 1.1 only: Also add the MySql.Data.EntityFrameworkCore.Design package.
    
    Microsoft.EntityFrameworkCore.Tools version 1.1.6 (for EF Core 1.1) and Microsoft.EntityFrameworkCore.Tools version 2.0.3 (for EF Core 2.0)
    Note
    
    The .NET tools are included in the .NET Core 2.1 SDK and not required or supported for EF Core 2.1. If this is an upgrade, remove the reference to that package from the .csproj file (version 2.0.3 in this example) :
    
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
    

    Mở Bảng điều khiển Trình quản lý Gói và nhập lệnh sau tại dấu nhắc để tạo các thực thể và DbContextcho sakilacơ sở dữ liệu (điều chỉnh các giá trị chuỗi kết nối để phù hợp với cài đặt của bạn cho người dùng = và mật khẩu = tùy chọn):

Scaffold-DbContext "server = localhost; port = 3306; user = root; password = mypass; database = sakila" MySql.Data.EntityFrameworkCore -OutputDir sakila -f

Visual Studio tạo một thư mục sakila mới bên trong dự án, chứa tất cả các bảng được ánh xạ tới các thực thể và tệp sakilaContext.cs.

Mặc dù hướng dẫn của Oracle nói rằng Microsoft.EntityFrameworkCore.Tools không cần thiết cho EF Core 2.1, tôi đã cài đặt phiên bản 2.2.0 tương thích với EF 2.2


0

Giống như Martin Sử dụng dòng lệnh, Cmd hoặc PowerShell cho phiên bản cụ thể:

Cập nhật công cụ dotnet --global dotnet-ef --version 3.1.0

hoặc để sử dụng phiên bản mới nhất (cũng hoạt động để cài đặt lại):

Cập nhật công cụ dotnet --global dotnet-ef

Tuy nhiên, tôi gặp sự cố trong máy tính của mình: "Khi chạy lệnh chỉ định bất kỳ phiên bản nào, tôi gặp lỗi sau: Công cụ 'dotnet-ef' không cập nhật được do nguyên nhân sau: Không thể khôi phục gói công cụ" Liko Pippo46

Vì vậy, tôi sử dụng các bước sau:

Gỡ cài đặt công cụ dotnet --global dotnet-ef Nhưng gặp vấn đề tương tự, vì vậy tôi sẽ chuyển đến thư mục của tiện ích mở rộng: C: \ Users \ Evan.dotnet \ tools.store \ dotnet-ef

Và tôi đã tìm thấy phiên bản cũ (2.x) Và vấn đề thứ hai của tôi là không tìm thấy tệp fileproject.assets.json

Vì vậy, tôi sao chép fileproject.assets.json trong phiên bản 2.x vào kho lưu trữ mẹ

Và tất cả đã được thực hiện một cách hoàn hảo:

  1. Gỡ cài đặt công cụ dotnet --global dotnet-ef

    loại bỏ phiên bản 2.x

  2. cài đặt công cụ dotnet --global dotnet-ef

    cài đặt 3.1 một



0

Trong ứng dụng của bạn, phiên bản thư viện lõi Dot.net là 2.1.2 và bạn đang làm việc trên 2.1.1 của lõi khung thực thể (2.1.1). Vì vậy, Cập nhật phiên bản thư viện của bạn phải bằng với phiên bản lõi dot.net (2.1.2).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.