จำเป็นต้องอัปเดต EF Core Tools


151

เมื่อฉันใช้เครื่องมือ dotnet ef ใน VS 2017 Package Manager Console ฉันได้รับข้อความเตือนว่าต้องอัปเดตเครื่องมือ 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

แต่ไฟล์ csproj ของฉันมีรายการนี้:

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

ฉันได้ยืนยันแล้วว่าเวอร์ชันที่ติดตั้งนั้นล้าสมัย:

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

แล้วฉันจะทำอย่างไรเพื่ออัปเดตเครื่องมือ? BTW ฉันเคยเห็นในคำตอบอื่น ๆ ว่าไฟล์ global.json ที่ล้าสมัยอาจทำให้เกิดปัญหานี้ได้ แต่ฉันไม่มีไฟล์ global.json ในโซลูชัน


ฉันคิดว่าคุณสามารถลบการอ้างอิงถึง DotNetCliToolReference, github.com/aspnet/EntityFramework.Docs/issues/708
Antonio Campagnaro

ขอบคุณสำหรับข้อเสนอแนะ @AntonioCampagnaro แต่เมื่อฉันลบการอ้างอิงเหล่านั้นฉันยังคงได้รับข้อความเตือน
Mark Olbert

1
อัปเกรดโดย Package Manager Console เหมือนคำตอบนี้
Sebastian Ferrari

คำตอบ:


314

ใช้บรรทัดคำสั่งCmdหรือPowerShellสำหรับเวอร์ชันเฉพาะ :

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

หรือสำหรับการใช้งานเวอร์ชันล่าสุด(ใช้งานได้สำหรับการติดตั้งใหม่) :

dotnet tool update --global dotnet-ef


2
ฉันมีเวอร์ชัน 3.0.0 และคำสั่งแรกใช้ได้ผลสำหรับฉัน แต่คำสั่งที่สองใช้ไม่ได้ เมื่อเรียกใช้คำสั่งที่ไม่ระบุเวอร์ชันใด ๆ ฉันได้รับข้อผิดพลาดต่อไปนี้: Tool 'dotnet-ef' ล้มเหลวในการอัปเดตเนื่องจากสิ่งต่อไปนี้: ไม่สามารถกู้คืนชุดเครื่องมือได้ ...
Pippo46

77
ทำไมถึงไม่สามารถพวกเขาเพียงแค่ใส่นี้ในข้อผิดพลาด!
Simon_Weaver

1
เราน่าจะทำ pr สักวัน ... @Simon_Weaver
Riscie

13
ห่าฉันสร้าง PR: github.com/dotnet/efcore/pull/20792
Riscie

19

ผมเด้งปัญหานี้ไปยังทีมพัฒนาไปบน GitHub ปรากฎว่านี่เป็นปัญหาที่ทราบในแพ็คเกจเครื่องมือหรือแพ็คเกจ nuget ปัจจุบันที่โหลดขึ้นเมื่อคุณสร้างไซต์ AspNet Core ที่ขับเคลื่อนด้วย EF Core มีเป้าหมายที่จะได้รับการแก้ไขในรุ่นอนาคต

สำหรับตอนนี้วิธีแก้ปัญหาคือการเพิกเฉยต่อคำเตือน

นอกจากนี้ยังมีวิธีแก้ปัญหาอื่นที่เกี่ยวข้องกับการปรับแต่งไฟล์ csproj เพื่อกำหนดเวอร์ชันของ metapackage ของ AspNet Core อย่างชัดเจน - มากถึง 2.1.3 ขณะที่ฉันกำลังเขียนสิ่งนี้ - แต่ฉันไม่สามารถใช้วิธีการนั้นได้ ฉันยังคงได้รับข้อความเตือน


12

ลองใช้วิธีนี้: ติดตั้งแพ็คเกจ Microsoft.EntityFrameworkCore.Tools

หากปัญหายังคงเกิดขึ้นให้ดำเนินการนี้ด้วย: Update-Package Microsoft.EntityFrameworkCore.Tools


3
นี่เป็นคำแนะนำที่ดี แต่ไม่สามารถแก้ไขปัญหาให้ฉันได้
Banoona

ติดตั้งแพคเกจที่ขาดหายไปสำหรับฉันแก้ไขปัญหาหนึ่งรุ่น แต่คำเตือนยังคงมีอยู่ ข้อเสนอแนะที่ดีทั้งสองวิธี
dyslexicanaboko

12

โซลูชันที่ใช้ได้สำหรับฉันกำลังเรียกใช้คำสั่งต่อไปนี้ใน Package Manager Console:

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

ตรวจสอบให้แน่ใจว่าเวอร์ชันตรงกับเวอร์ชันในข้อความแสดงข้อผิดพลาดในกรณีของฉันฉันได้รับข้อผิดพลาดต่อไปนี้:

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.

ตรวจสอบเวอร์ชันที่มีให้จากไซต์ต่อไปนี้: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/


3

วิธีแก้ปัญหาของฉันคือการติดตั้งเครื่องมือ dotnet-ef จาก microsoft https://www.nuget.org/packages/dotnet-ef ใช้คำสั่งเดียวกัน แต่ไม่มีคำเตือน การเปลี่ยนแปลงคือใช้ dotnet-ef แทน dotnet ef

และหากคุณติดตั้ง dotnet-ef แล้วให้ใช้ dotnet tool update --global dotnet-ef --version n.n.n(nnn เวอร์ชันของคุณเพื่ออัปเดต)


2

ติดตั้ง. NET Core SDK v2.1.401 เวอร์ชันใหม่และตรวจสอบ> dotnet ef --version อีกครั้ง ฉันมีปัญหาเดียวกันและในกรณีของฉันมันได้ผล นอกจากนี้คุณไม่จำเป็นต้องเพิ่ม Microsoft.EntityFrameworkCore.Tools.DotNet


Thanx, @surbaniak. ฉันทำไปแล้ว ปรากฎว่านี่เป็นปัญหาที่ทราบแล้วกับแพ็กเกจนักเก็ตปัจจุบันและมีเป้าหมายในการแก้ไข วิธีแก้ปัญหาคือเพียงเพิกเฉยต่อปัญหาเนื่องจาก (อ้างว่ายังไม่ได้ตรวจสอบตัวเอง) ไม่มีการสูญเสียฟังก์ชันการทำงาน
Mark Olbert

คำตอบนี้ช่วยฉันด้วย ฉันติดตั้ง. NET Core SDK v2.1.403 (เกือบจะเป็นเวอร์ชันเดียวกัน) และคำเตือนไม่ปรากฏขึ้นอีกต่อไป คุณต้องตรวจสอบให้แน่ใจว่าทั้ง. Net core SDK และรันไทม์ได้รับการอัปเดตเพื่อหลีกเลี่ยงคำเตือนดังกล่าวเวอร์ชันเป็นเวอร์ชันล่าสุดแล้ว URL มีการเปลี่ยนแปลงเช่นกันที่เว็บไซต์ Microsoft แต่ฉันใช้: microsoft.com/net/download/dotnet-core/2.1
Tore Aurstad

ฉันติดตั้ง. NET Core SKD v2.1.701 (dotnet-sdk-2.1.701-win-x64.exe) แต่ฉันยังคงได้รับข้อผิดพลาด
Patee Gutee

2

ในการแก้ไขปัญหานี้คุณสามารถปฏิบัติตามหนึ่งในเทคนิคต่อไปนี้:


  • เทคนิคที่ 1: การใช้ Package Manager Console (โดยเฉพาะสำหรับผู้ใช้ Microsoft Visual Studio)
    PM >Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.2

  • เทคนิคที่ 2:การใช้. NET CLI
    >dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.1.2

  • เทคนิคที่ 3: การใช้การอ้างอิงแพ็คเกจ

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.2">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
  • เทคนิคที่ 4:การใช้Packet CLI
    >paket add Microsoft.EntityFrameworkCore.Tools --version 2.1.2

ข้อควรจำ:สำหรับเวอร์ชันนี้คุณต้องใช้NuGet 3.6 หรือสูงกว่า
ลิงค์อ้างอิง: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/2.1.2


1
  • ไม่สนใจปัญหา
  • อย่าอัปเดต <PackageReference Include = "Microsoft. EntityFrameworkCore. Tools" Version = "" /> ของคุณ
  • ในกรณีของฉันฉันก้าวไปข้างหน้าด้วย 'Update-Database -Context MyElementContext' และตอนนี้ทุกอย่างทำงานได้ดี

ฉันพบสิ่งนี้ในหนังสือ 'Programming ASP.NET Core' โดย Dino Esposito

'หมายเหตุเครื่องมือ CLI เวอร์ชันนี้ไม่เหมือนกับเวอร์ชันของรันไทม์. NET Core ที่แอปพลิเคชันจะใช้ เวอร์ชันรันไทม์เป็นเวอร์ชันเฉพาะในโปรเจ็กต์ fi le และคุณสามารถแก้ไขได้อย่างสะดวกสบายจากภายในอินเทอร์เฟซผู้ใช้ของ IDE ที่คุณเลือก หากคุณต้องการแก้ไขโปรเจ็กต์ fi le ด้วยตนเองแทนการแก้ไขไฟล์. csproj XML fi le และเปลี่ยนค่าขององค์ประกอบ TargetFramework ค่านี้หมายถึงชื่อเล่นที่ระบุเวอร์ชัน (เช่น netcoreapp2.0) '


0

ฉันไม่พบวิธีอัปเดตแพ็กเกจโดยเฉพาะ แต่ในคอนโซลตัวจัดการแพ็กเกจฉันเรียกใช้ 'update-package' ดำเนินการและอัปเดตแพ็คเกจทั้งหมดที่อ้างถึงในโปรเจ็กต์รวมถึง EF Core Tools นั่นอาจไม่เหมาะสำหรับคุณเนื่องจากสามารถอัปเดตแพ็คเกจที่คุณไม่ต้องการได้


Thanx, @malckier ฉันใช้งานแพ็คเกจอัปเดตและอัปเดตบางอย่าง แต่ข้อความเตือนยังคงปรากฏอยู่
Mark Olbert

0

การทำตามขั้นตอนในเอกสารนี้ช่วยฉันแก้ปัญหา - https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-entityframework-core-scaffold-example.html

นั่งร้านฐานข้อมูลโดยใช้ Package Manager Console ใน Visual Studio

  • เปิด Visual Studio และสร้างแอปคอนโซลใหม่ (.NET Core) สำหรับ C #
  • เพิ่มแพ็คเกจ MySQL NuGet สำหรับ EF Core โดยใช้คอนโซล Package Manager ตัวอย่างเช่นใช้คำสั่งต่อไปนี้เพื่อเพิ่มแพ็คเกจ MySql.Data.EntityFrameworkCore v8.0.13:

ติดตั้งแพ็คเกจ MySql.Data.EntityFrameworkCore -Version 8.0.13

สำคัญ

เวอร์ชัน (ตัวอย่างเช่น -Version 8.0.13) ต้องตรงกับเวอร์ชัน Connector / NET จริงที่คุณใช้อยู่ สำหรับข้อมูลเวอร์ชันปัจจุบัน

  • ติดตั้งแพ็คเกจ NuGet ต่อไปนี้โดยเลือก Package Manager Console หรือ Manage NuGet Packages for Solution จากเมนู Tools จากนั้นเลือก NuGet Package Manager:

    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" />
    

    เปิดPackage Manager Consoleและป้อนคำสั่งต่อไปนี้ที่พร้อมต์เพื่อสร้างเอนทิตีและDbContextสำหรับsakilaฐานข้อมูล (ปรับค่าสตริงการเชื่อมต่อให้ตรงกับการตั้งค่าของคุณสำหรับตัวเลือกผู้ใช้ = และรหัสผ่าน =):

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

Visual Studio สร้างโฟลเดอร์ sakila ใหม่ภายในโครงการซึ่งมีตารางทั้งหมดที่แมปกับเอนทิตีและไฟล์ sakilaContext.cs

แม้ว่าคำแนะนำของ Oracle จะบอกว่า Microsoft.EntityFrameworkCore.Tools ไม่จำเป็นสำหรับ EF Core 2.1 ฉันติดตั้งเวอร์ชัน 2.2.0 ที่เข้ากันได้กับ EF 2.2


0

เช่นเดียวกับ Martin Use command line, Cmd หรือ PowerShell สำหรับเวอร์ชันเฉพาะ:

อัปเดตเครื่องมือ dotnet --global dotnet-ef - เวอร์ชัน 3.1.0

หรือสำหรับการใช้งานเวอร์ชันล่าสุด (ใช้งานได้สำหรับการติดตั้งใหม่):

การอัปเดตเครื่องมือ dotnet --global dotnet-ef

แต่ฉันพบปัญหาในพีซีของฉัน: "เมื่อเรียกใช้คำสั่งที่ไม่ระบุเวอร์ชันใด ๆ ฉันพบข้อผิดพลาดต่อไปนี้: Tool 'dotnet-ef' ไม่สามารถอัปเดตได้เนื่องจากสาเหตุต่อไปนี้: ไม่สามารถกู้คืนแพ็คเกจเครื่องมือ" Liko Pippo46

ดังนั้นฉันจึงใช้ขั้นตอนเหล่านี้:

ถอนการติดตั้งเครื่องมือ dotnet --global dotnet-ef แต่มีปัญหาเดียวกันดังนั้นฉันจะไปที่ไดเรกทอรีของส่วนขยาย: C: \ Users \ Evan.dotnet \ tools.store \ dotnet-ef

และฉันพบเวอร์ชันเก่า (2.x) และปัญหาที่สองของฉันคือไม่พบไฟล์ fileproject.assets.json

ดังนั้นฉันจึงคัดลอก fileproject.assets.json ในเวอร์ชัน 2.x ไปยังที่เก็บพาเรนต์

และทุกอย่างทำได้อย่างสมบูรณ์แบบ:

  1. ถอนการติดตั้งเครื่องมือ dotnet --global dotnet-ef

    ลบเวอร์ชัน 2.x

  2. ติดตั้งเครื่องมือ dotnet --global dotnet-ef

    ติดตั้ง 3.1 หนึ่ง


0

อัปเดตเครื่องมือ EF Core โดยใช้dotnet CLIหรือPackage Manager Consoleหรือไปที่
ไซต์นี้https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/2.1.2

หรือคุณอาจเพิกเฉยต่อสิ่งนี้ ไม่ใช่ประเด็นใหญ่ ...


0

ในแอปพลิเคชันของคุณเวอร์ชันไลบรารีหลักของ Dot.net คือ 2.1.2 และคุณกำลังทำงานบน 2.1.1 ของ Entity framework core (2.1.1) ดังนั้นอัปเดตเวอร์ชันไลบรารีของคุณซึ่งควรเท่ากับเวอร์ชันหลักของ dot.net (2.1.2)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.