web-dev-qa-db-fra.com

dotnet ef introuvable dans .NET Core 3

Je suis les docs afin de créer une migration initiale. Lorsque j'exécute dotnet, j'obtiens la section d'aide, ce qui signifie que le CHEMIN fonctionne correctement.

Ensuite, j'essaie d'exécuter la commande ci-dessous à partir des documents dans la fenêtre de la console:

dotnet ef migrations add InitialCreate  

J'obtiens l'erreur suivante:

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.
  • J'ai exclu le premier élément depuis que j'ai copié la commande.
  • J'ai exclu le deuxième élément car le package Microsoft.EntityFrameworkCore.SqlServer est installé.
  • J'ai exclu le troisième élément car j'obtiens la section d'aide lors de l'appel dotnet .

Je recherche sur le problème, mais comme la version est nouvelle, il n'y a pas grand-chose à faire et/ou il se noie dans des problèmes similaires des versions précédentes.

J'ai essayé d'installer de force Microsoft.EntityFrameworkCore juste au cas où il devrait être explicitement ajouté. Je suis tombé sur le message d'erreur me disant que la dernière version à choisir est 2.2.6 et une rétrogradation est un non-go. Je ne sais pas comment installer la version compatible avec le package SQL que j'ai déjà sur mon système (et encore moins certain si c'est la bonne approche pour tuer ce problème).

Déclassement de package détecté: Microsoft.EntityFrameworkCore de 3.0.0-preview6.19304.10 à 2.2.6. Référencez le package directement à partir du projet pour sélectionner une version différente.
Web ->
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)

117
Konrad Viltersten

Voir annonce pour ASP.NET Core 3 Preview 4, qui explique que cet outil n'est plus intégré et nécessite une installation explicite:

L'outil dotnet ef ne fait plus partie du SDK .NET Core

Ce changement nous permet d'expédier dotnet ef en tant qu'outil CLI .NET standard pouvant être installé en tant qu'outil global ou local. Par exemple, pour pouvoir gérer les migrations ou échafauder un DbContext, installez dotnet ef comme un outil global en tapant la commande suivante:

dotnet tool install --global dotnet-ef --version 3.0.0

La raison du changement est expliquée dans le docs :

Pourquoi

Cette modification nous permet de distribuer et de mettre à jour dotnet ef comme un outil CLI .NET standard sur NuGet, compatible avec le fait que EF Core 3.0 est également toujours distribué en tant que package NuGet.

En outre, vous devrez peut-être ajouter les packages NuGet suivants à votre projet:

219
Kirk Larkin

EDIT: si vous utilisez un Dockerfile pour les déploiements, voici les étapes à suivre pour résoudre ce problème.

Modifiez votre Dockerfile pour inclure les éléments suivants:

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

Modifiez également votre dotnet ef les commandes doivent être dotnet-ef

6
Nick Spicer

J'ai eu le même problème. J'ai résolu, en désinstallant toutes les versions de mon PC, puis en réinstallant dotnet.

0
Angel Ucan

Les outils globaux peuvent être installés dans le répertoire par défaut ou dans un emplacement spécifique. Les répertoires par défaut sont:

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

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

Si vous essayez d'exécuter un outil global, vérifiez que la variable d'environnement PATH sur votre machine contient le chemin où vous avez installé l'outil global et que l'exécutable se trouve dans ce chemin.

Résoudre les problèmes d'utilisation de l'outil .NET Core

0
Gambitier