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

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

миграции dotnet ef добавить 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)

Ответы (15)

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

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

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

dotnet tool install --global dotnet-ef

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

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

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

Почему

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

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

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

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

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

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

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

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

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

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

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

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

 - имя: install dotnet tool dotnet-ef
    команда: установка инструмента dotnet --global dotnet-ef --version {{dotnetef_version}}
    стать: нет

Если вы спросите себя, какие версии доступны:

Вкладка Версии на этой странице: https://www.nuget.org/packages/dotnet-ef/

Кроме того, как уже упоминалось другими, это:

dotnet tool install --global dotnet-ef --version 5.0.11

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

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

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

dotnet new tool-manifest

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

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

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

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

Шаги:

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

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

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

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

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

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

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

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

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

export PATH=$PATH:/c/Users/username/.dotnet/tools

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

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

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

вы можете запустить эту команду

dotnet tool install dotnet-ef -g

тогда все будет работать хорошо :)

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

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

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

dotnet tool run dotnet-ef

или

dotnet dotnet-ef

Если вы используете пакет dotnet-sdk Snap в 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"

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

So to resolve the problem, you can install the dotnet-ef locally in your solution rather than adding it globally.

Шаги по локальной установке.

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

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

    cd. \. Config

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

2022 WebDevInsider