dotnet ef introuvable dans .NET Core 3

171

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

Ensuite, j'essaye 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 lorsque j'appelle dotnet .

Je recherche le problème sur Google, mais comme la version est nouvelle, il n'y a pas grand chose à faire et / ou elle 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 faudrait l'ajouter explicitement. Je suis tombé sur le message d'erreur me disant que la dernière version à choisir est la 2.2.6 et qu'une rétrogradation est interdite. 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 éliminer ce problème).

Rétrogradation de package détectée: 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 autre version.
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)

Konrad Viltersten
la source

Réponses:

332

Consultez l' 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 de livrer en dotnet eftant qu'outil CLI .NET standard qui peut être installé en tant qu'outil global ou local. Par exemple, pour pouvoir gérer les migrations ou échafauder a DbContext, installez en dotnet eftant qu'outil global en tapant la commande suivante:

dotnet tool install --global dotnet-ef

Pour installer une version spécifique de l'outil, utilisez la commande suivante:

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

La raison du changement est expliquée dans la documentation :

Pourquoi

Cette modification nous permet de distribuer et de mettre dotnet efà jour en tant qu'outil CLI .NET standard sur NuGet, ce qui est cohérent 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:

Kirk Larkin
la source
5
Voici le lien vers nuget si vous souhaitez vérifier la version à installer
Juan De la Cruz
2
Juste une note .. [dotnet-ef --version 3.0.0] est le plus compatible pour [dotnet core version 3.1.100].
Catalyst
L'installation globale est pratique, mais vous pouvez également installer les outils dotnet localement maintenant
Zach Esposito
Microsoft.EntityFrameworkCore.Tools n'est pas nécessaire.
yogihosting
9

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
ENV PATH $PATH:/root/.dotnet/tools
RUN dotnet tool install -g dotnet-ef --version 3.1.1

Modifiez également vos dotnet efcommandes pour qu'elles soientdotnet-ef

Nick Spicer
la source
Dans le cas où toujours, le PATH ne fonctionne pas, utilisez la directive ENV comme ceci: ENV PATH $ PATH: /root/.dotnet/tools
Jaliya Udagedara
4

Les outils globaux peuvent être installés dans le répertoire par défaut ou à 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 ordinateur 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

Gambitier
la source
C'était mon problème, lorsque j'ai installé sur MacOS via "dotnet tool install --global dotnet-ef", j'ai reçu une invite pour fermer et rouvrir la fenêtre du terminal afin que la nouvelle configuration prenne effet, mais en fait le dossier d'installation par défaut $ HOME / .net / tools n'a pas été ajouté à la variable PATH.
Mike Dailor le
Je suis content que cela vous ait aidé :)
Gambitier
1

Exécutez PowerShell ou l'invite de commande en tant qu'administrateur et exécutez la commande ci-dessous.

installation de l'outil dotnet --global dotnet-ef --version 3.1.3

Surendra Yadav
la source
0

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

Ange Ucan
la source
6
Mieux adapté comme commentaire. Devrait expliquer comment résoudre et pourquoi avec des ressources
Josh Adams
0

si vous utilisez le package snap dotnet-sdk sous Linux, cela peut être résolu en mettant à jour votre ~ .bashrc / etc. comme suit:

#!/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"
édencorbine
la source
0

Pour moi, le problème a été résolu après avoir fermé Visual Studio et l'ouvrir à nouveau

Ammar Ismaeel
la source