dotnet ef не найден в .NET Core 3

209

Я слежу за документами , чтобы создать начальную миграцию. Когда я выполняю dotnet, я получаю раздел помощи, означающий, что PATH работает правильно.

Затем я пытаюсь выполнить команду ниже из документов в окне консоли:

dotnet ef migrations add InitialCreate  

Я получаю следующую ошибку:

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.
  • Я исключил первый элемент, так как скопировал команду.
  • Второй пункт я исключил, потому что установлен пакет Microsoft.EntityFrameworkCore.SqlServer .
  • Я исключил третий пункт, потому что при вызове dotnet я получаю раздел справки .

Я ищу проблему в Google, но, поскольку версия новая, особо нечего делать и / или она тонет в аналогичных проблемах из более ранних версий.

Я попытался принудительно установить Microsoft.EntityFrameworkCore на случай, если его нужно явно добавить. Я столкнулся с сообщением об ошибке, в котором говорилось, что последняя версия для выбора - 2.2.6, и переход на более раннюю версию запрещен. Я не уверен, как установить версию, совместимую с SQL-пакетом, который у меня уже есть в моей системе (и даже менее уверен, что это правильный подход для устранения этой проблемы).

Обнаружено понижение версии пакета: Microsoft.EntityFrameworkCore с 3.0.0-preview6.19304.10 на 2.2.6. Ссылка на пакет прямо из проекта, чтобы выбрать другую версию.
Интернет ->
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)
Интернет -> Microsoft. EntityFrameworkCore (> = 2.2.6)

Конрад Вильтерстен
источник

Ответы:

413

См. Объявление для ASP.NET Core 3 Preview 4, в котором объясняется, что этот инструмент больше не является встроенным и требует явной установки:

Инструмент dotnet ef больше не является частью .NET Core SDK

Это изменение позволяет нам поставлять dotnet efкак обычный инструмент .NET CLI, который может быть установлен как глобальный, так и локальный инструмент. Например, чтобы иметь возможность управлять миграциями или формировать шаблон a DbContext, установите dotnet efкак глобальный инструмент, введя следующую команду:

dotnet tool install --global dotnet-ef

Чтобы установить определенную версию инструмента, используйте следующую команду:

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

Причина изменения объясняется в документации :

Зачем

Это изменение позволяет нам распространять и обновлять dotnet efкак обычный инструмент .NET CLI на NuGet, в соответствии с тем фактом, что EF Core 3.0 также всегда распространяется как пакет NuGet.

Кроме того, вам может потребоваться добавить в проект следующие пакеты NuGet:

Кирк Ларкин
источник
5
Вот ссылка на nuget, если вы хотите проверить версию для установки
Хуан Де ла Крус
2
Просто примечание. [Dotnet-ef --version 3.0.0] наиболее совместим с [dotnet core version 3.1.100].
Catalyst
Установка глобально удобно, но вы также можете установить Dotnet инструментов локально в настоящее время
Зак Эспозито
Microsoft.EntityFrameworkCore.Tools не требуется.
yogihosting
Инструмент dotnet-ef уже установлен. Но та же проблема, что и OP.
Майкл Роджерс,
13

РЕДАКТИРОВАТЬ: если вы используете Dockerfile для развертываний, вот шаги, которые необходимо предпринять для решения этой проблемы.

Измените свой Dockerfile, включив в него следующее:

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

Также измените свои dotnet efкоманды наdotnet-ef

Ник Спайсер
источник
Если все же PATH не работает, используйте директиву ENV следующим образом: ENV PATH $ PATH: /root/.dotnet/tools
Джалия Удагедара
5

Глобальные инструменты можно установить в каталог по умолчанию или в определенное место. Каталоги по умолчанию:

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

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

Если вы пытаетесь запустить глобальный инструмент, убедитесь, что переменная среды PATH на вашем компьютере содержит путь, по которому вы установили глобальный инструмент, и что исполняемый файл находится по этому пути.

Устранение проблем с использованием инструмента .NET Core

Gambitier
источник
Это была моя проблема, когда я установил на MacOS с помощью «dotnet tool install --global dotnet-ef», мне было предложено закрыть и снова открыть окно терминала, чтобы новая конфигурация вступила в силу, но на самом деле папка установки по умолчанию $ HOME / .net / tools не был добавлен в переменную PATH.
Майк Дэйлор,
Я рад, что это вам помогло :)
Gambitier
4

Запустите PowerShell или командную строку от имени администратора и выполните команду ниже.

установка инструмента dotnet --global dotnet-ef --version 3.1.3

Сурендра Ядав
источник
0

У меня такая же проблема. Я решил, удалив все версии на моем компьютере, а затем переустановил dotnet.

Ангел Укан
источник
6
Лучше подходит в качестве комментария. Должен объяснить, как решить проблему и почему с ресурсами
Джош Адамс,
0

если вы используете пакет snap dotnet-sdk в Linux, это можно решить, обновив ~ .bashrc / и т. д. следующим образом:

#!/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"
Эденкорбин
источник
0

Для меня проблема была решена после того, как я закрыл Visual Studio и снова открыл ее

Аммар Исмаил
источник
-1

Для всех, кто использует .NET Core CLI на MinGW MSYS. После установки с помощью

dotnet tool install --global dotnet-ef

добавьте эту строку в файл bashrc c: \ msys64 \ home \ username \ .bashrc (расположение зависит от вашей настройки)

export PATH=$PATH:/c/Users/username/.dotnet/tools
Thebennies
источник
Этот ответ не решает проблему OP. Пожалуйста, подумайте над ответом на общий вопрос, а также представьте этот конкретный способ решения проблемы.
lnjuanj,
OP не объясняет свое окружение. «Окно консоли» может использовать множество окружений.
thebennies