Musisz zaktualizować EF Core Tools

151

Gdy używam narzędzi dotnet ef w konsoli Menedżera pakietów VS 2017, otrzymuję komunikat ostrzegawczy dotyczący konieczności zaktualizowania narzędzi 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

Ale mój plik csproj ma ten wpis:

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

Potwierdziłem, że zainstalowana wersja jest w rzeczywistości nieaktualna:

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

Więc co mam zrobić, aby zaktualizować narzędzia? Przy okazji, widziałem w innych odpowiedziach, że nieaktualny plik global.json może powodować ten problem. Ale w rozwiązaniu nie mam pliku global.json.

Mark Olbert
źródło
Myślę, że możesz usunąć odniesienie do DotNetCliToolReference, github.com/aspnet/EntityFramework.Docs/issues/708
Antonio Campagnaro
Dzięki za sugestię, @AntonioCampagnaro. Ale kiedy usuwam te odniesienia, nadal otrzymuję komunikat ostrzegawczy.
Mark Olbert
1
Uaktualnij go za pomocą konsoli menedżera pakietów, tak jak ta odpowiedź
Sebastian Ferrari

Odpowiedzi:

314

Użyj wiersza poleceń, Cmd lub PowerShell dla określonej wersji:

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

lub do użytku w najnowszej wersji (działa również w przypadku ponownej instalacji) :

dotnet tool update --global dotnet-ef

Jaskółka oknówka
źródło
2
Miałem wersję 3.0.0 i pierwsza komenda działała, ale druga nie. Podczas uruchamiania polecenia bez określenia dowolnej wersji wystąpił następujący błąd: Nie udało się zaktualizować narzędzia „dotnet-ef” z następujących powodów: Nie można przywrócić pakietu narzędzi ...
Pippo46
77
Dlaczego nie można po prostu umieścić to W komunikacie o błędzie!
Simon_Weaver
1
prawdopodobnie powinniśmy pewnego dnia zrobić prowizję ... @Simon_Weaver
Riscie
13
Do diabła, stworzyłem PR: github.com/dotnet/efcore/pull/20792
Riscie
19

Przekazałem ten problem do zespołu programistów na github . Okazuje się, że jest to znany problem w bieżących pakietach narzędzi lub pakietach nuget, które są ładowane podczas tworzenia witryny AspNet Core z obsługą EF Core. Ma to zostać naprawione w przyszłej wersji.

Na razie obejściem jest po prostu zignorowanie ostrzeżenia.

Oferowane jest również inne obejście, polegające na poprawieniu pliku csproj w celu jawnego zdefiniowania wersji metapakietu AspNet Core - piszę to do wersji 2.1.3 - ale nie mogłem uzyskać takiego podejścia do pracy; Nadal otrzymywałem ostrzeżenie.

Mark Olbert
źródło
12

Spróbuj tego: Install-Package Microsoft.EntityFrameworkCore.Tools

Jeśli problem nadal występuje, wykonaj również to: Update-Package Microsoft.EntityFrameworkCore.Tools

Lemraj
źródło
3
To dobra sugestia, ale nie rozwiązała problemu .
Banoona,
Zainstalowałem brakujący pakiet, rozwiązałem problem jednej generacji, ale ostrzeżenie się powtarza. Tak czy inaczej dobra sugestia.
dyslexicanaboko
12

Rozwiązaniem, które działało dla mnie, jest uruchomienie następujących poleceń w konsoli Menedżera pakietów:

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

Upewnij się, że wersja jest zgodna z wersją w komunikacie o błędzie w moim przypadku pojawił się następujący błąd:

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.

Sprawdź wersje dostępne w następującej witrynie: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/

Patee Gutee
źródło
3

Moim rozwiązaniem było zainstalowanie narzędzia dotnet-ef z firmy Microsoft https://www.nuget.org/packages/dotnet-ef . Używa tych samych poleceń, ale bez ostrzeżeń. Zmiana polega na użyciu dotnet-ef zamiast dotnet ef.

A jeśli masz już zainstalowany dotnet-ef, użyj dotnet tool update --global dotnet-ef --version n.n.n(nnn twoja wersja do aktualizacji)

joakimja
źródło
2

Zainstaluj nową wersję .NET Core SDK v2.1.401 i ponownie sprawdź> dotnet ef --version. Miałem ten sam problem iw moim przypadku zadziałało. Ponadto nie musisz dodawać Microsoft.EntityFrameworkCore.Tools.DotNet.

surbaniak
źródło
Dzięki, @surbaniak. Już to zrobiłem. Okazuje się, że jest to znany problem występujący w obecnych pakietach NuGet i należy go naprawić. Sposób obejścia problemu polega na zignorowaniu problemu, ponieważ (rzekomo; sam tego nie sprawdzałem) nie ma utraty funkcjonalności.
Mark Olbert
Ta odpowiedź pomogła również mi. Zainstalowałem .NET Core SDK v2.1.403 (prawie w tej samej wersji) i ostrzeżenie już się nie pojawia. Musisz upewnić się, że zarówno zestaw .Net core SDK, jak i środowisko wykonawcze zostały zaktualizowane, aby uniknąć takiego ostrzeżenia, że ​​wersje są aktualne. Adresy URL są zmieniane również na stronie internetowej Microsoft, ale użyłem: microsoft.com/net/download/dotnet-core/2.1
Tore Aurstad
Zainstalowałem .NET Core SKD v2.1.701 (dotnet-sdk-2.1.701-win-x64.exe), ale nadal pojawia się błąd.
Patee Gutee
2

Aby rozwiązać ten problem, możesz zastosować jedną z następujących technik:


  • Technika 1: Korzystanie z konsoli Menedżera pakietów (szczególnie dla użytkowników programu Microsoft Visual Studio)
    PM >Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.2

  • Technika 2: Używanie .NET CLI
    >dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.1.2

  • Technika 3: Korzystanie z odwołania do pakietu

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.2">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
  • Technika 4: Korzystanie z interfejsu wiersza polecenia pakietu
    >paket add Microsoft.EntityFrameworkCore.Tools --version 2.1.2

Pamiętaj: aby użyć tej wersji, potrzebujesz pakietu NuGet 3.6 lub nowszego.
Odnośnik referencyjny: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/2.1.2

Md Wahid
źródło
1
  • Zignoruj ​​problem
  • Nie aktualizuj swojego <PackageReference Include = "Microsoft. EntityFrameworkCore. Tools" Version = "" />
  • W moim przypadku przeszedłem do przodu z `` Update-Database -Context MyElementContext '' i teraz wszystko działa dobrze.

Znalazłem to w książce „Programming ASP.NET Core” autorstwa Dino Esposito.

Uwaga: Ta wersja narzędzia CLI nie jest taka sama, jak wersja środowiska uruchomieniowego .NET Core, z którego będzie korzystać aplikacja. Wersja środowiska wykonawczego jest określona w pliku projektu i można ją wygodnie edytować z poziomu interfejsu użytkownika wybranego IDE. Jeśli zamiast tego chcesz ręcznie edytować plik projektu, wystarczy edytować plik XML .csproj i zmienić wartość elementu TargetFramework. Wartość odnosi się do pseudonimu identyfikującego wersję (na przykład netcoreapp2.0). '

GioLopera
źródło
0

Nie mogłem znaleźć konkretnego sposobu aktualizacji pakietu, ale w konsoli Menedżera pakietów uruchomiłem „pakiet aktualizacji”. Przeszedł przez i zaktualizował wszystkie pakiety, do których odwołuje się projekt, w tym narzędzia EF Core. To może nie być idealne dla Ciebie, ponieważ może zaktualizować pakiety, których nie chciałeś.

malckier
źródło
Dzięki, @malckier. Uruchomiłem pakiet aktualizacji i zaktualizowałem niektóre rzeczy. Ale komunikat ostrzegawczy nadal się pojawiał.
Mark Olbert,
0

Wykonanie czynności opisanych w tym dokumencie pomogło mi rozwiązać problem - https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-entityframework-core-scaffold-example.html

Tworzenie szkieletu bazy danych przy użyciu konsoli Menedżera pakietów w programie Visual Studio

  • Otwórz program Visual Studio i utwórz nową aplikację konsolową (.NET Core) dla języka C #.
  • Dodaj pakiet MySQL NuGet dla EF Core przy użyciu konsoli Menedżera pakietów. Na przykład użyj następującego polecenia, aby dodać pakiet MySql.Data.EntityFrameworkCore v8.0.13:

Zainstaluj pakiet MySql.Data.EntityFrameworkCore - wersja 8.0.13

Ważny

Wersja (na przykład -Wersja 8.0.13) musi odpowiadać rzeczywistej używanej wersji oprogramowania Connector / NET. Aby uzyskać informacje o aktualnej wersji.

  • Zainstaluj następujące pakiety NuGet, wybierając konsolę Menedżera pakietów lub Zarządzaj pakietami NuGet dla rozwiązania z menu Narzędzia, a następnie menu Menedżera pakietów 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" />
    

    Otwarte Pakiet konsoli Menedżer i wprowadź następujące polecenie w wierszu polecenia, aby utworzyć jednostki i DbContextdla sakilabazy danych (ustaw wartości connection-strunowych, aby dopasować ustawienia user = = Opcje i hasło):

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

Program Visual Studio tworzy nowy folder sakila w projekcie, który zawiera wszystkie tabele zamapowane na jednostki i plik sakilaContext.cs.

Mimo że instrukcje Oracle mówiły, że Microsoft.EntityFrameworkCore.Tools nie jest potrzebny dla EF Core 2.1, zainstalowałem wersję 2.2.0, która jest kompatybilna z EF 2.2

Mauricio Gracia Gutierrez
źródło
0

Podobnie jak Martin Użyj wiersza poleceń, Cmd lub PowerShell dla określonej wersji:

Aktualizacja narzędzia dotnet --global dotnet-ef --version 3.1.0

lub do użytku w najnowszej wersji (działa również w przypadku ponownej instalacji):

aktualizacja narzędzia dotnet --global dotnet-ef

Ale mam problem na moim komputerze: „Po uruchomieniu polecenia bez określenia jakiejkolwiek wersji otrzymałem następujący błąd: Nie udało się zaktualizować narzędzia„ dotnet-ef ”z powodu: Nie można przywrócić pakietu narzędzi” Liko Pippo46

Więc używam tych kroków:

dotnet tool uninstall --global dotnet-ef Ale mam ten sam problem, więc przechodzę do katalogu rozszerzenia: C: \ Users \ Evan.dotnet \ tools.store \ dotnet-ef

I znalazłem starą wersję (2.x), a moim drugim problemem był plik fileproject.assets.json nie został znaleziony

Więc kopiuję plik fileproject.assets.json w wersji 2.x do repozytorium nadrzędnego

I wszystko zostało wykonane perfekcyjnie:

  1. Odinstaluj narzędzie dotnet --global dotnet-ef

    usuwa wersję 2.x.

  2. instalacja narzędzia dotnet --global dotnet-ef

    zainstaluj wersję 3.1

evanboissonnot
źródło
0

W Twojej aplikacji rdzeń biblioteki Dot.net jest wersją 2.1.2 i pracujesz nad 2.1.1 rdzeniem Entity Framework (2.1.1). Tak więc zaktualizuj wersję swojej biblioteki, która powinna być równa podstawowej wersji dot.net (2.1.2).

Sher Singh
źródło