dotnet ef nicht in .NET Core 3 gefunden


166

Ich folge den Dokumenten , um eine erste Migration zu erstellen. Wenn ich ausführe dotnet, erhalte ich den Hilfeabschnitt, was bedeutet, dass der PFAD ordnungsgemäß funktioniert.

Dann versuche ich, den folgenden Befehl aus den Dokumenten im Konsolenfenster auszuführen:

dotnet ef migrations add InitialCreate  

Ich erhalte folgende Fehlermeldung:

Could not execute because the specified command or file was not found.  
Possible reasons for this include:  
  * You misspelled a built-in dotnet command.  
  * You intended to execute a .NET Core program, but dotnet-ef does not exist.  
  * You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
  • Ich habe das erste Element ausgeschlossen, seit ich den Befehl kopiert habe.
  • Ich habe das zweite Element ausgeschlossen, da das Paket Microsoft.EntityFrameworkCore.SqlServer installiert ist.
  • Ich habe das dritte Element ausgeschlossen, da beim Aufrufen von dotnet der Hilfeabschnitt angezeigt wird .

Ich google das Problem, aber da die Version neu ist, gibt es nicht viel zu tun und / oder es ertrinkt in ähnlichen Problemen aus früheren Versionen.

Ich habe versucht, Microsoft.EntityFrameworkCore zwangsweise zu installieren, falls es explizit hinzugefügt werden muss. Ich bin auf die Fehlermeldung gestoßen, dass die neueste Version 2.2.6 ist und ein Downgrade kein Problem ist. Ich bin mir nicht sicher, wie ich die Version installieren soll, die mit dem SQL-Paket kompatibel ist, das ich bereits auf meinem System habe (und noch weniger sicher, ob dies der richtige Ansatz ist, um dieses Problem zu beheben).

Erkanntes Downgrade des Pakets: Microsoft.EntityFrameworkCore von 3.0.0-Preview6.19304.10 auf 2.2.6. Verweisen Sie direkt aus dem Projekt auf das Paket, um eine andere Version auszuwählen.
Web ->
Microsoft.EntityFrameworkCore.SqlServer 3.0.0-Vorschau6.19304.10 ->
Microsoft.EntityFrameworkCore.Relational 3.0.0-Vorschau6.19304.10 ->
Microsoft.EntityFrameworkCore (> = 3.0.0-Vorschau6.19304.10)
Web -> Microsoft. EntityFrameworkCore (> = 2.2.6)

Antworten:


321

In der Ankündigung zu ASP.NET Core 3 Preview 4 wird erläutert, dass dieses Tool nicht mehr integriert ist und eine explizite Installation erfordert:

Das dotnet ef-Tool ist nicht mehr Teil des .NET Core SDK

Diese Änderung ermöglicht es uns, dotnet efals reguläres .NET CLI-Tool zu liefern, das entweder als globales oder als lokales Tool installiert werden kann. Um beispielsweise Migrationen oder Gerüste zu verwalten DbContext, installieren Sie dotnet efals globales Tool den folgenden Befehl:

dotnet tool install --global dotnet-ef

Verwenden Sie den folgenden Befehl, um eine bestimmte Version des Tools zu installieren:

dotnet tool install --global dotnet-ef --version 3.1.4

Der Grund für die Änderung wird in den Dokumenten erläutert :

Warum

Diese Änderung ermöglicht es uns, dotnet efals reguläres .NET CLI-Tool auf NuGet zu verteilen und zu aktualisieren. Dies steht im Einklang mit der Tatsache, dass EF Core 3.0 auch immer als NuGet-Paket verteilt wird.

Darüber hinaus müssen Sie Ihrem Projekt möglicherweise die folgenden NuGet-Pakete hinzufügen:


5
Hier ist der Link zu Nuget, wenn Sie die zu installierende Version überprüfen möchten
Juan De la Cruz

2
Nur eine Anmerkung .. [dotnet-ef --version 3.0.0] ist am kompatibelsten für [dotnet core version 3.1.100].
Katalysator

Die globale Installation ist praktisch, aber Sie können Dotnet-Tools jetzt auch lokal installieren
Zach Esposito,

Microsoft.EntityFrameworkCore.Tools wird nicht benötigt.
Yogihosting

9

BEARBEITEN: Wenn Sie eine Docker-Datei für Bereitstellungen verwenden, müssen Sie diese Schritte ausführen, um dieses Problem zu beheben.

Ändern Sie Ihre Docker-Datei so, dass sie Folgendes enthält:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
ENV PATH $PATH:/root/.dotnet/tools
RUN dotnet tool install -g dotnet-ef --version 3.1.1

Ändern Sie auch Ihre dotnet efBefehle indotnet-ef


Falls der PATH dennoch nicht funktioniert, verwenden Sie die ENV-Direktive wie folgt: ENV PATH $ PATH: /root/.dotnet/tools
Jaliya Udagedara

4

Globale Tools können im Standardverzeichnis oder an einem bestimmten Speicherort installiert werden. Die Standardverzeichnisse sind:

  • Linux / macOS ---> $ HOME / .dotnet / tools

  • Windows --->% USERPROFILE% \. Dotnet \ tools

Wenn Sie versuchen, ein globales Tool auszuführen, überprüfen Sie, ob die Umgebungsvariable PATH auf Ihrem Computer den Pfad enthält, in dem Sie das globale Tool installiert haben, und ob sich die ausführbare Datei in diesem Pfad befindet.

Beheben Sie Probleme bei der Verwendung des .NET Core-Tools


Dies war mein Problem, als ich unter MacOS über "dotnet tool install --global dotnet-ef" installiert wurde, wurde ich aufgefordert, das Terminalfenster zu schließen und erneut zu öffnen, damit die neue Konfiguration wirksam wird, aber tatsächlich der Standardinstallationsordner $ HOME / .net / tools wurde der PATH-Variablen nicht hinzugefügt.
Mike Dailor

Ich bin froh, dass es dir geholfen hat :)
Gambitier

1

Führen Sie PowerShell oder die Eingabeaufforderung als Administrator aus und führen Sie den folgenden Befehl aus.

dotnet tool install --global dotnet-ef --version 3.1.3


0

Ich hatte das gleiche Problem. Ich habe beschlossen, alle Versionen auf meinem PC zu deinstallieren und dann dotnet neu zu installieren.


6
Besser als Kommentar geeignet. Sollte erklären, wie und warum mit Ressourcen zu lösen ist
Josh Adams

0

Wenn Sie das Snap-Paket dotnet-sdk unter Linux verwenden, kann dies durch Aktualisieren von ~ .bashrc / etc. wie folgt behoben werden:

#!/bin/bash
export DOTNET_ROOT=/snap/dotnet-sdk/current
export MSBuildSDKsPath=$DOTNET_ROOT/sdk/$(${DOTNET_ROOT}/dotnet --version)/Sdks
export PATH="${PATH}:${DOTNET_ROOT}"
export PATH="$PATH:$HOME/.dotnet/tools"

0

Für mich wurde das Problem behoben, nachdem ich Visual Studio geschlossen und erneut geöffnet habe

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.