dotnet ef no se encuentra en .NET Core 3

170

Estoy siguiendo los documentos para crear una migración inicial. Cuando ejecuto dotnet, obtengo la sección de ayuda, lo que significa que la RUTA funciona correctamente.

Luego intento ejecutar el siguiente comando desde los documentos en la ventana de la consola:

dotnet ef migrations add InitialCreate  

Obtuve el siguiente error:

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.
  • Excluí el primer elemento desde que copié el comando.
  • Excluí el segundo elemento porque está instalado el paquete Microsoft.EntityFrameworkCore.SqlServer .
  • Excluí el tercer elemento porque recibo la sección de ayuda cuando invoco dotnet .

Estoy buscando en Google el problema, pero como la versión es nueva, no hay mucho para seguir y / o se está ahogando en problemas similares de versiones anteriores.

Traté de instalar por la fuerza Microsoft.EntityFrameworkCore en caso de que deba agregarse explícitamente. Me encontré con el mensaje de error que me decía que la última versión para elegir es 2.2.6 y una versión anterior es una opción prohibida. No estoy seguro de cómo instalar la versión compatible con el paquete SQL que ya tengo en mi sistema (y aún menos seguro si ese es el enfoque correcto para solucionar este problema).

Versión anterior del paquete detectado: Microsoft.EntityFrameworkCore de 3.0.0-preview6.19304.10 a 2.2.6. Consulte el paquete directamente desde el proyecto para seleccionar una versión diferente.
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
fuente

Respuestas:

328

Consulte el anuncio de ASP.NET Core 3 Preview 4, que explica que esta herramienta ya no está integrada y requiere una instalación explícita:

La herramienta dotnet ef ya no forma parte del SDK de .NET Core

Este cambio nos permite enviar dotnet efcomo una herramienta CLI .NET regular que se puede instalar como una herramienta global o local. Por ejemplo, para poder administrar migraciones o andamios a DbContext, instálelo dotnet efcomo una herramienta global escribiendo el siguiente comando:

dotnet tool install --global dotnet-ef

Para instalar una versión específica de la herramienta, use el siguiente comando:

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

La razón del cambio se explica en los documentos :

Por qué

Este cambio nos permite distribuir y actualizar dotnet efcomo una herramienta regular de .NET CLI en NuGet, de acuerdo con el hecho de que EF Core 3.0 también se distribuye siempre como un paquete NuGet.

Además, es posible que deba agregar los siguientes paquetes NuGet a su proyecto:

Kirk Larkin
fuente
55
Aquí está el enlace para nuget si desea verificar la versión para instalar
Juan De la Cruz
2
Solo una nota ... [dotnet-ef --version 3.0.0] es la más compatible para [dotnet core versión 3.1.100].
Catalizador
La instalación global es conveniente, pero también puede instalar herramientas dotnet localmente ahora
Zach Esposito
Microsoft.EntityFrameworkCore.Tools no es necesario.
yogihosting
9

EDITAR: Si está utilizando un Dockerfile para implementaciones, estos son los pasos que debe seguir para resolver este problema.

Cambie su Dockerfile para incluir lo siguiente:

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

También cambie sus dotnet efcomandos para serdotnet-ef

Nick Spicer
fuente
Por si acaso, la RUTA no funciona, use la directiva ENV de esta manera: RUTA ENV $ RUTA: /root/.dotnet/tools
Jaliya Udagedara
4

Las herramientas globales se pueden instalar en el directorio predeterminado o en una ubicación específica. Los directorios predeterminados son:

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

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

Si está intentando ejecutar una herramienta global, verifique que la variable de entorno PATH en su máquina contenga la ruta donde instaló la herramienta global y que el ejecutable esté en esa ruta.

Solucionar problemas de uso de la herramienta .NET Core

Gambitier
fuente
Este fue mi problema, cuando instalé en MacOS a través de "dotnet tool install --global dotnet-ef" recibí un mensaje para cerrar y volver a abrir la ventana del terminal para que la nueva configuración surta efecto, pero de hecho la carpeta de instalación predeterminada $ HOME / .net / tools no se había agregado a la variable PATH.
Mike Dailor
Me alegro de que te haya ayudado :)
Gambitier
1

Ejecute PowerShell o símbolo del sistema como administrador y ejecute el siguiente comando.

instalación de la herramienta dotnet --global dotnet-ef --version 3.1.3

Surendra Yadav
fuente
0

Yo tuve el mismo problema. Resolví, desinstalando todas las versiones en mi PC y luego reinstalé dotnet.

Angel Ucan
fuente
66
Más adecuado como comentario. Debería explicar cómo resolver y por qué con recursos
Josh Adams
0

si está utilizando el paquete snap dotnet-sdk en Linux, esto puede resolverse actualizando su ~ .bashrc / etc. de la siguiente manera:

#!/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"
edencorbina
fuente
0

Para mí, el problema se resolvió después de cerrar Visual Studio y abrirlo nuevamente

Ammar Ismaeel
fuente