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

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

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

dotnet ef migrations добавить InitialCreate

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

Не удалось выполнить, поскольку указанная команда или файл не найдены.
Возможные причины:

  • Вы неправильно написали встроенную команду dotnet.

  • Вы намеревались выполнить программу .NET Core, но dotnet-ef не существует.

  • Вы намеревались запустить глобальный инструмент, но исполняемый файл с префиксом dotnet с таким именем не может быть найден в 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)


person Konrad Viltersten    schedule 16.07.2019    source источник
comment
@petermortensen Похоже, чья-то правка нарушила поток текста. Я откатываюсь, и вы можете попробовать еще раз, если хотите.   -  person Konrad Viltersten    schedule 11.06.2021


Ответы (14)


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

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

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

dotnet tool install --global dotnet-ef

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

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

Причина изменения объясняется в docs:

Почему

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

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

person Kirk Larkin    schedule 17.07.2019
comment
Вот ссылка на nuget, если вы хотите проверить версию для установки - person Juan De la Cruz; 17.10.2019
comment
Просто примечание. [Dotnet-ef --version 3.0.0] наиболее совместим с [dotnet core version 3.1.100]. - person Catalyst; 16.01.2020
comment
Глобальная установка удобна, но вы также можете установить инструменты dotnet локально прямо сейчас - person Zach Esposito; 19.05.2020

Если вы используете 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

person Nick Spicer    schedule 19.01.2020
comment
Если все же PATH не работает, используйте директиву ENV следующим образом: ENV PATH $ PATH: /root/.dotnet/tools - person Jaliya Udagedara; 18.03.2020

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

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

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

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

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

person Gambitier    schedule 30.03.2020
comment
Это была моя проблема, когда я установил на MacOS с помощью инструмента dotnet install --global dotnet-ef, я получил приглашение закрыть и снова открыть окно терминала, чтобы новая конфигурация вступила в силу, но на самом деле папка установки по умолчанию $ HOME / .net / tools не были добавлены в переменную PATH. - person Mike Dailor; 22.04.2020
comment
Рад, что тебе помогло :) - person Gambitier; 22.04.2020

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

dotnet tool install --global dotnet-ef --version 3.1.3
person Surendra Yadav    schedule 23.04.2020

Для всех, кто использует интерфейс командной строки .NET Core на MinGW MSYS:

После установки с помощью

dotnet tool install --global dotnet-ef

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

export PATH=$PATH:/c/Users/username/.dotnet/tools
person thebennies    schedule 22.10.2020
comment
Этот ответ не решает проблему OP. Пожалуйста, подумайте над ответом на общий вопрос, а также представьте этот конкретный способ решения проблемы. - person lnjuanj; 22.10.2020
comment
OP не объясняет свое окружение. Окно консоли может использовать множество окружений. - person thebennies; 27.10.2020
comment
Это также работает для Ubuntu. Я удивлен, что это нигде не задокументировано - person jack4it; 21.12.2020

Я решил эту проблему, установив dotnet-f tool локально с помощью следующих команд.

Если вы настраиваете этот репозиторий

dotnet new tool-manifest

dotnet tool install --local dotnet-ef --version 5.0.6

Затем используйте dotnet-dotnet-ef вместо dotnet-ef.

person Community    schedule 07.06.2021
comment
Обратите внимание, что вопрос немного устарел, и на момент его создания рассматриваемой версией была .NET Core 3.x, тогда как ваше решение предлагает .NET Core 5 (или, скорее, .NET 5 или как там MS называет это на этой неделе). Я все еще ценю ваш ответ (отсюда и положительный голос) и хотел бы, чтобы он остался. Просто сделаю замечание на будущее, неряшливый читатель. - person Konrad Viltersten; 08.06.2021

Причина в том, что инструмент dotnet ef больше не является частью .NET Core SDK в ASP.NET Core 3.0.

Решение: установите dotnet ef как глобальный инструмент

Шаги:

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

Для последней версии:

dotnet tool install --global dotnet-ef

Для конкретной версии:

dotnet tool install --global dotnet-ef --version <<version_number>>

person Sumith Ekanayake    schedule 06.06.2021
comment
Я действительно шокирован тем, что этот крошечный вопрос привлекает столько внимания и интереса. Об этом спрашивали примерно 2 года назад (и, по сути, три версии C # назад). Репутация зашкаливает, более 250 голосов за и 50 фаворитов. Хотя мне это нравится и я ценю новые вклады (например, ваш, следовательно, +1, потому что это хорошо), я не могу перестать удивляться, что я сделал, чтобы этот вопрос стал таким популярным. какая у тебя идея? - person Konrad Viltersten; 06.06.2021
comment
@KonradViltersten Я полностью с вами согласен. Но разработчики все еще сталкиваются с такими крошечными проблемами. - person Sumith Ekanayake; 07.06.2021

Если вы используете 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"
person edencorbin    schedule 10.06.2020
comment
Что вы имеете в виду под / etc? et cetera? Или каталог / etc? Или что-то другое? В любом случае можно уточнить? - person Peter Mortensen; 10.06.2021

У меня возникла эта проблема после того, как я установил инструмент dotnet-ef с помощью Ansible с повышенными привилегиями sudo на Ubuntu. Мне пришлось добавить стала: нет для задачи Playbook, после чего инструмент dotnet-ef стал доступен текущему пользователю.

  - name: install dotnet tool dotnet-ef
    command: dotnet tool install --global dotnet-ef --version {{dotnetef_version}}
    become: no
person yibe    schedule 24.02.2021
comment
Куда он должен идти? Например, файл? Какое имя у файла? Или что-то другое? - person Peter Mortensen; 10.06.2021

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

person Angel Ucan    schedule 25.02.2020
comment
Лучше подходит в качестве комментария. Должен объяснить, как решить и почему с ресурсами - person Josh Adams; 25.02.2020

Я выполнил следующие шаги, и у меня все сработало:

  1. Добавить источник:

    dotnet nuget add source --name nuget.org https://api.nuget.org/v3/index.json
    
  2. Запустите командную строку установки:

    dotnet tool install --global dotnet-ef --version 5.0.6
    
person Salim Nadji    schedule 14.05.2021

Иногда это может происходить из-за разных пользователей в системе.

Поэтому для решения проблемы вы можете установить dotnet-ef локально в свое решение, а не добавлять его глобально.

Действия по локальной установке.

  1. Создайте локальный файл манифеста через dotnet new tool-manifest

  2. Заходим в папку config:

    cd .\.config

  3. Установите инструмент через dotnet tool install dotnet-ef --version versionNumber. Он будет успешно установлен, и его команды будут доступны в проекте.

person Syed Tayyab    schedule 21.05.2021
comment
Я предлагаю вам проверить существующие ответы, прежде чем размещать свои собственные. Проблема связана с ранней стадией версии (проверьте дату публикации). - person Konrad Viltersten; 21.05.2021
comment
спасибо за информацию, но эта проблема возникла недавно, когда я использовал .net 5, и это было единственное решение, которое я нашел, так что это может кому-то помочь. - person Syed Tayyab; 25.05.2021

Это будет работать для меня в коде Visual Studio в Ubuntu

dotnet tool install --global dotnet-ef
dotnet tool restore

После этого все выполнение происходит как

dotnet tool run dotnet-ef

or

dotnet dotnet-ef
person Prabhakar    schedule 12.06.2021

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

person Ammar Ismaeel    schedule 22.07.2020