Не можете найти команду 'dotnet ef'?

Я использую.NET core 2.0 на Arch VScode и пытаюсь заставить работать инструменты EF, но продолжаю получать эту ошибку "не могу найти команду dotnet ef". Я только что посмотрел везде, и ни одно из предложений не сработало. Так что, если вы можете помочь, это было бы очень ценно.

Результат запуска 'dotnet ef'

[wasiim@wasiim-PC WebApiServerApp]$ dotnet ef --help
Cannot find command 'dotnet ef', please run the following command to install

dotnet tool install --global dotnet-ef
[wasiim@wasiim-PC WebApiServerApp]$ dotnet tool list -g
Package Id            Version      Commands        
---------------------------------------------------
dotnet-dev-certs      2.2.0        dotnet-dev-certs
dotnet-ef             2.2.3        dotnet-ef       
[wasiim@wasiim-PC WebApiServerApp]$ 

это результат dotnet --info, если это поможет

[wasiim@wasiim-PC WebApiServerApp]$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.105
 Commit:    7cecb35b92

Runtime Environment:
 OS Name:     arch
 OS Version:  
 OS Platform: Linux
 RID:         arch-x64
 Base Path:   /opt/dotnet/sdk/2.2.105/

Host (useful for support):
  Version: 2.2.3
  Commit:  6b8ad509b6

.NET Core SDKs installed:
  2.2.105 [/opt/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.NETCore.App 2.2.3 [/opt/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Это мой файл.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00005" />
    <PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00005" />
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.5" />
   <PackageReference Include="Lucene.Net" Version="4.8.0-beta00005" />
    <PackageGroup Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />

  </ItemGroup>

</Project>

14 ответов

Решение

.NET Core 3.0 (предварительная версия) версия этого сбоя гораздо ярче:

$ dotnet ef
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.

Второй и третий оба относятся к dotnet пытаясь найти dotnet-ef команда, но не могу ее найти. Как говорит третий пункт, dotnet-ef не на вашем пути.

Вот что говорят доктора:

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

OS Path

Linux/macOS $HOME/.dotnet/tools

Windows %USERPROFILE%\.dotnet\tools

Итак, вы должны добавить $HOME/.dotnet/tools/ на ваш $PATH,

Но также обратите внимание на эту часть из документов:

Эти местоположения добавляются в путь пользователя при первом запуске SDK, поэтому установленные там глобальные инструменты можно вызывать напрямую.

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

В моем случае папки инструментов внутри не было %USERPROFILE%\.dotnet\ поэтому мне пришлось запустить команду dotnet tool install --global dotnet-efустановить dotnet ef. Затем я смог запустить dotnet ef...

Это было результатом указанной выше команды установки:

Для тех, кто столкнулся с проблемой после обновления своего пакета Visual Studio или.NET Core, это связано с обновлениями, сделанными в.NET Core 3 путем удаления dotnet efиз.NET Core и сделав его отдельным пакетом, который можно установить с помощью:

dotnet tool install -g dotnet-ef

Для справки см. Этот ответ и это критическое изменение

Я попробовал все ответы выше и не работал на своем Mac с последним обновлением Catalina.

если вы, например, используете версию.netcore 3, вам необходимо выполнить следующие команды:

export PATH="$PATH:$HOME/.dotnet/tools/"
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=false
export DOTNET_ADD_GLOBAL_TOOLS_TO_PATH=true

dotnet tool install --global dotnet-ef --version 3.0.0

обновление базы данных dotnet ef

Если приведенная выше команда выдает ошибку, выполните следующие действия.

  1. проверьте, существует ли путь%USERPROFILE%.dotnet\
  2. если нет, то запустите команду ниже

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

  1. Теперь снова проверьте путь и установите переменную среды для пути ниже

%USERPROFILE%.dotnet\ инструмент

  1. Теперь в cmd установите путь, в котором присутствует ваш файл контекста базы данных, а затем запустите команду ниже

обновление базы данных dotnet ef

Примечание: это сработало для.Net Core 3.0

По поводу исправления пути:

Имейте в виду, что это добавляет путь к User PATH, а не к переменной среды System PATH. При запуске "Командной строки разработчика" или "Developer Powershell" из Visual Studio он не использует переменную пути пользователя. Вам также нужно будет добавить его в переменную среды System.

Кроме того, вам необходимо перезапустить VS, прежде чем изменения вступят в силу.

Иногда при установке новой версии dotnet SDK, он попадает в PATH,

Вы должны вручную добавить папку .dotnet/tools из вашего домашнего каталога в PATH,

      dotnet nuget add source --name nuget.org https://api.nuget.org/v3/index.json

dotnet tool install --global dotnet-ef

Для тех, кто борется с этой проблемой в Jetbrains Rider, я попробовал все решения, перечисленные на этой странице, и в конечном итоге зашел в VS и запустил команду dotnet tool install --global dotnet-ef --version 3.0.0, а затем снова открыл в Rider и это сработало.

TL&DR: dotnet tool install -g dotnet-ef

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

Ссылка: https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-0-preview-4/

У меня была такая же проблема в Ubuntu 20.04.1 с.net Core 5.0.0-rc.1, и решение, которое сработало для меня, заключалось в установке dotnet ef как местный инструмент

https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools#install-a-local-tool

dotnet new tool-manifest
dotnet tool install  dotnet-ef --version 5.0.0-rc.1.20451.13

С помощью EF Core 6.0 мы можем создавать пакеты EF — MSDN

Это решает вышеуказанную проблему, пакет можно запускать как обычный исполняемый файл и применять миграции. Просто убедитесь, что у вас есть appsettings.jsonили же secrets.jsonпри использовании пакета UserSecrets вместе со сгенерированным двоичным файлом.

      user@shell~$ ./efbundle

PS> efbundle.exe

Проект --projectа также --startup-projectтакже может быть указан так же, как и с обычными миграциями

      PS> dotnet ef migrations bundle --self-contained -r linux-x64 --project .\MyApp.Shared  --startup-project .\MyApp.ApiClient

Я считаю, что мы должны иметь возможность также указать --connection your_connection_stringвот, но я не пробовал.

Для меня закрытие решения и перезапуск окон решили проблему. Но перед этим нам нужно выполнить следующие шаги, чтобы проверить, правильно ли выполнена установка.

  1. Выполните приведенную ниже команду. Если вы не видите dotnet-ef, переходите к шагу 2, иначе переходите к шагу 3.

            dotnet tool list --global 
    
  2. Перейдите по пути и проверьте, есть ли dotnet-efесть или нет. В противном случае вам может потребоваться запустить

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

    Я считаю, что вы это уже сделали.

  3. Добавить этот путь %USERPROFILE%\.dotnet\tools в переменные вашей среды, чтобы увидеть, есть ли у вас это в своем проекте или нет.

  4. Наконец, вам нужно закрыть проект и перезапустить окно. В моем случае этот шаг решил проблему.

Это связано с обновлениями, сделанными в.NET Core 3 путем удаления dotnet ef из.NET Core и превращения его в отдельный пакет.

1-Вам нужно добавить%USERPROFILE%.dotnet\tools в ПУТЬ.

2-Если не существует, запустите эту команду

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

Другие вопросы по тегам