Nie znaleziono dotnet ef w .NET Core 3

170

Obserwuję docs w celu utworzenia wstępnej migracji. Kiedy wykonuję dotnet, otrzymuję sekcję pomocy, co oznacza, że ​​PATH działa poprawnie.

Następnie próbuję wykonać poniższe polecenie z dokumentów w oknie konsoli:

dotnet ef migrations add InitialCreate  

Otrzymuję następujący błąd:

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.
  • Wykluczyłem pierwszy element, odkąd skopiowałem polecenie.
  • Wykluczyłem drugą pozycję, ponieważ pakiet Microsoft.EntityFrameworkCore.SqlServer jest zainstalowany.
  • Wykluczyłem trzecią pozycję, ponieważ otrzymałem sekcję pomocy podczas wywoływania dotnet .

Szukam go w Google, ale ponieważ wersja jest nowa, nie ma wiele do roboty i / lub tonie w podobnych problemach z wcześniejszych wersji.

Próbowałem na siłę zainstalować Microsoft.EntityFrameworkCore na wypadek, gdyby trzeba było go jawnie dodać. Pojawił się komunikat o błędzie informujący mnie, że najnowsza wersja do wyboru to 2.2.6, a downgrade jest niemożliwy. Nie jestem pewien, jak zainstalować wersję zgodną z pakietem SQL, który mam już w swoim systemie (a jeszcze mniej jestem pewien, czy jest to właściwe podejście do rozwiązania tego problemu).

Wykryty spadek wersji pakietu: Microsoft.EntityFrameworkCore z 3.0.0-preview6.19304.10 do 2.2.6. Odwołaj się do pakietu bezpośrednio z projektu, aby wybrać inną wersję.
Sieć ->
Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview6.19304.10 ->
Microsoft.EntityFrameworkCore.Relational 3.0.0-preview6.19304.10 ->
Microsoft.EntityFrameworkCore (> = 3.0.0-preview6.19304.10)
Web -> Microsoft. EntityFrameworkCore (> = 2.2.6)

Konrad Viltersten
źródło

Odpowiedzi:

330

Zobacz ogłoszenie dotyczące ASP.NET Core 3 w wersji zapoznawczej 4, w którym wyjaśniono, że to narzędzie nie jest już wbudowane i wymaga jawnej instalacji:

Narzędzie dotnet ef nie jest już częścią zestawu .NET Core SDK

Ta zmiana umożliwia nam dostarczanie dotnet efjako zwykłe narzędzie .NET CLI, które można zainstalować jako narzędzie globalne lub lokalne. Na przykład, aby móc zarządzać migracjami lub szkieletem a DbContext, zainstaluj dotnet efjako narzędzie globalne, wpisując następujące polecenie:

dotnet tool install --global dotnet-ef

Aby zainstalować określoną wersję narzędzia, użyj następującego polecenia:

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

Powód zmiany wyjaśniono w dokumentach :

Czemu

Ta zmiana umożliwia nam dystrybucję i aktualizację dotnet efjako zwykłe narzędzie .NET CLI w NuGet, co jest zgodne z faktem, że EF Core 3.0 jest również zawsze dystrybuowany jako pakiet NuGet.

Ponadto może być konieczne dodanie następujących pakietów NuGet do projektu:

Kirk Larkin
źródło
5
Oto link do nuget, jeśli chcesz zweryfikować wersję do zainstalowania
Juan De la Cruz
2
Tylko uwaga… [dotnet-ef --version 3.0.0] jest najbardziej zgodny z [dotnet core w wersji 3.1.100].
Catalyst
Instalacja globalnie jest wygodne, ale można również zainstalować narzędzia DotNet lokalnie teraz
Zach Esposito
Microsoft.EntityFrameworkCore.Tools nie jest potrzebny.
yogihosting
9

EDYCJA: Jeśli używasz pliku Dockerfile do wdrożeń, są to kroki, które musisz wykonać, aby rozwiązać ten problem.

Zmień plik Dockerfile, aby zawierał następujące elementy:

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

Zmień także swoje dotnet efpolecenia nadotnet-ef

Nick Spicer
źródło
W przypadku, gdy PATH nie działa, użyj dyrektywy ENV w ten sposób: ENV PATH $ PATH: /root/.dotnet/tools
Jaliya Udagedara
4

Narzędzia globalne można zainstalować w domyślnym katalogu lub w określonej lokalizacji. Domyślne katalogi to:

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

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

Jeśli próbujesz uruchomić narzędzie globalne, sprawdź, czy zmienna środowiskowa PATH na komputerze zawiera ścieżkę, w której zainstalowano narzędzie globalne, i czy w tej ścieżce znajduje się plik wykonywalny.

Rozwiązywanie problemów z użyciem narzędzia .NET Core

Gambitier
źródło
To był mój problem, kiedy instalowałem na MacOS przez "dotnet tool install --global dotnet-ef" Otrzymałem monit o zamknięcie i ponowne otwarcie okna terminala, aby nowa konfiguracja odniosła skutek, ale w rzeczywistości domyślny folder instalacyjny $ HOME / .net / tools nie zostało dodane do zmiennej PATH.
Mike Dailor
Cieszę się, że ci pomogło :)
Gambitier
1

Uruchom PowerShell lub wiersz polecenia jako administrator i uruchom poniższe polecenie.

instalacja narzędzia dotnet --global dotnet-ef --version 3.1.3

Surendra Yadav
źródło
0

Miałem ten sam problem. Rozwiązałem problem, odinstalowując wszystkie wersje de na moim komputerze, a następnie ponownie instalując dotnet.

Angel Ucan
źródło
6
Lepiej nadaje się jako komentarz. Powinien wyjaśnić, jak rozwiązać i dlaczego, korzystając z zasobów
Josh Adams,
0

jeśli używasz pakietu snap dotnet-sdk w systemie Linux, można to rozwiązać, aktualizując plik ~ .bashrc / itp. w następujący sposób:

#!/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"
edencorbin
źródło
0

Dla mnie problem został rozwiązany po zamknięciu programu Visual Studio i ponownym otwarciu

Ammar Ismaeel
źródło