dotnet ef não encontrado no .NET Core 3

170

Estou seguindo os documentos para criar uma migração inicial. Quando executo dotnet, recebo a seção de ajuda, o que significa que o PATH funciona corretamente.

Em seguida, tento executar o comando abaixo nos documentos na janela do console:

dotnet ef migrations add InitialCreate  

Estou tendo o erro a seguir:

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í o primeiro item desde que copiei o comando.
  • Excluí o segundo item porque o pacote Microsoft.EntityFrameworkCore.SqlServer está instalado.
  • Excluí o terceiro item porque recebo a seção de ajuda ao chamar o dotnet .

Estou pesquisando a questão no Google, mas como a versão é nova, não há muito o que continuar e / ou ela está se afogando em questões semelhantes das versões anteriores.

Tentei instalar o Microsoft.EntityFrameworkCore à força para o caso de precisar ser explicitamente adicionado. Eu encontrei a mensagem de erro dizendo que a versão mais recente para escolher é a 2.2.6 e que o downgrade não é possível. Não tenho certeza de como instalar a versão compatível com o pacote SQL que já tenho no meu sistema (e menos ainda se essa é a abordagem correta para solucionar esse problema).

Downgrade de pacote detectado: Microsoft.EntityFrameworkCore de 3.0.0-preview6.19304.10 a 2.2.6. Faça referência ao pacote diretamente do projeto para selecionar uma versão 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
fonte

Respostas:

328

Veja o anúncio do ASP.NET Core 3 Preview 4, que explica que esta ferramenta não está mais embutida e requer uma instalação explícita:

A ferramenta dotnet ef não faz mais parte do .NET Core SDK

Essa alteração nos permite enviar dotnet efcomo uma ferramenta CLI do .NET normal que pode ser instalada como uma ferramenta global ou local. Por exemplo, para poder gerenciar migrações ou andaimes a DbContext, instale dotnet efcomo uma ferramenta global digitando o seguinte comando:

dotnet tool install --global dotnet-ef

Para instalar uma versão específica da ferramenta, use o seguinte comando:

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

O motivo da mudança é explicado nos documentos :

Por quê

Essa alteração nos permite distribuir e atualizar dotnet efcomo uma ferramenta CLI do .NET normal no NuGet, consistente com o fato de que o EF Core 3.0 também é sempre distribuído como um pacote NuGet.

Além disso, pode ser necessário adicionar os seguintes pacotes NuGet ao seu projeto:

Kirk Larkin
fonte
5
Aqui está o link para o nuget, se você deseja verificar a versão a instalar #
Juan De la Cruz
2
Apenas uma observação .. [dotnet-ef - versão 3.0.0] é o mais compatível para [dotnet core versão 3.1.100].
Catalyst
Instalar globalmente é conveniente, mas você também pode instalar ferramentas dotnet localmente agora
Zach Esposito
Microsoft.EntityFrameworkCore.Tools não é necessário.
yogihosting
9

EDIT: Se você estiver usando um Dockerfile para implantações, estas são as etapas necessárias para resolver esse problema.

Altere seu Dockerfile para incluir o seguinte:

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

Mude também seus dotnet efcomandos para seremdotnet-ef

Nick Spicer
fonte
Caso ainda assim, o PATH não funcione, use a diretiva ENV assim: ENV PATH $ PATH: /root/.dotnet/tools
Jaliya Udagedara
4

As ferramentas globais podem ser instaladas no diretório padrão ou em um local específico. Os diretórios padrão são:

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

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

Se você estiver tentando executar uma ferramenta global, verifique se a variável de ambiente PATH em sua máquina contém o caminho em que você instalou a ferramenta global e se o executável está nesse caminho.

Solucionar problemas de uso da ferramenta .NET Core

Gambitier
fonte
Este foi o meu problema, quando instalei no MacOS via "dotnet tool install --global dotnet-ef" recebi um prompt para fechar e reabrir a janela do terminal para que a nova configuração entrasse em vigor, mas na verdade a pasta de instalação padrão $ HOME / .net / tools não foram adicionados à variável PATH.
Mike Dailor 22/04
Estou feliz que ajudou você :)
Gambitier
1

Execute o PowerShell ou o prompt de comando como administrador e execute o comando abaixo.

instalação da ferramenta dotnet - global dotnet-ef --version 3.1.3

Surendra Yadav
fonte
0

Eu tive o mesmo problema. Eu resolvi, desinstalando todas as versões no meu pc e reinstale o dotnet.

Angel Ucan
fonte
6
Mais adequado como um comentário. Deve explicar como resolver e por que com recursos
Josh Adams
0

se você estiver usando o pacote snap dotnet-sdk no linux, isso pode ser resolvido atualizando o seu ~ .bashrc / etc. da seguinte maneira:

#!/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
fonte
0

Para mim, o problema foi resolvido depois que eu fecho o Visual Studio e o abro novamente

Ammar Ismaeel
fonte