Не найдено исполняемого файла, соответствующего команде «dotnet-ef»

82

Я делаю образец проекта, используя ASP.Net Core RC2 с Microsoft.EntityFramework.CoreSQLite.

Я следил за этим руководством: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

Но когда я запускаю эту команду:

dotnet ef migrations add FirstMigration

У меня такая ошибка:

No executable found matching command "dotnet-ef"

Вот моя project.jsonконфигурация:

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0-rc2-3002702",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Sqlite": "1.0.0-rc2-final"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "gcServer": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}
Redplane
источник
В этом объявлении показано, как ваш project.json должен выглядеть в RC2, если вы используете инструменты: github.com/aspnet/Announcements/issues/172
Павел

Ответы:

60

Entity Framework Core 1.0

Вам просто нужно обновить toolsраздел файла project.json, включив в него следующее:

"Microsoft.EntityFrameworkCore.Tools": {
  "version": "1.0.0-preview1-final",
  "imports": [
    "portable-net45+win8+dnxcore50",
    "portable-net45+win8"
  ]
}

Это должно сделать dotnet efкоманды доступными.

Важный

Я также должен отметить, что dotnet efкоманды будут доступны только при их запуске из того же каталога, в котором находится файл project.json.

Entity Framework Core 1.1
Если у вас снова возникла эта проблема после обновления до Entity Framework Core 1.1, обязательно замените Microsoft.EntityFrameworkCore.Toolsзависимость Microsoft.EntityFrameworkCore.Tools.DotNetверсией 1.1.0-preview4. Сохранять importsраздел тоже нет необходимости . Дополнительные сведения об этом см. В заголовке «Обновление до 1.1» в сообщении блога с объявлением о выпуске Entity Framework Core 1.1 .

Дэниел Грим
источник
22
project.jsonМоей проблемой было отсутствие в папке с , спасибо!
kitsu.eb
6
У меня не работает. У меня все та же ошибка.
Никола Скоу
@NikolaSchou: В разделе инструментов попробуйте без структуры, то есть просто добавьте версию. Например: `" tools ": {" Microsoft.EntityFrameworkCore.Tools ":" 1.0.0-preview2-final "," Microsoft.AspNetCore.Server.IISIntegration.Tools ":" 1.0.0-preview2-final "},`
Арве Хансен
1
@NikolaSchou Вы также должны повторно открыть cmd.
Тайлер
1
@ Адриан, спасибо тебе тоже. Спустя долгое время я вернулся к ядру .net. Я столкнулся со старой проблемой, когда задал этот вопрос. Так смешно
Redplane
56

Entity Framework Core 1.1

Добавьте это, если вы используете VS2017 с новыми проектами .csproj без файла project.json.

вам нужно отредактировать файл .csproj (щелкните его правой кнопкой мыши в обозревателе решений и выберите `` Изменить любой.csproj ''), а затем вставьте его в

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
      <Version>1.0.0-*</Version>
    </DotNetCliToolReference>
  </ItemGroup>

любезно предоставлено: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967

Мвоа
источник
он работает, но необходимо знать правильную версию. Поскольку я новичок, мне также было очень сложно определить правильную версию. Итак, любой, кто следит за ответом, знает вашу версию Microsoft.EntityFrameworkCore.Tools.DotNet и вставляет тег версии. ie <Version> 2.0.3 </Version>
Салех Энам Шохаг
Это действительно спасает мне день. Спасибо! Я обновил, VS2017и он автоматически обновился dotnet core CLIдо 2.0версии, несовместимой с dotnet core 1.0. Но, похоже, настало время обновить свой проект .net core 1.0до 2.0.
Boooooooooms
40

Специально для VS2017 15.3 или новее и ASP.NET CORE 2.0 или новее ...

Установите nuget для поставщика db через командную строку или диспетчер пакетов nuget.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Добавьте следующий раздел в .csproj

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" 
    Version="2.0.0" />
</ItemGroup>

Установите инструменты времени разработки через командную строку или диспетчер nuget в VS2017.

dotnet add package Microsoft.EntityFrameworkCore.Design

Это включает dotnet ef * в командной строке в каталоге проекта.

Включает команды dotnet ef * в командной строке в каталоге проекта,

dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold 
Джо Хили
источник
2
Отличный ответ, я все искал, и раздел о добавлении в «ItemGroup» был тем, что действительно блокировало меня в .NET Core 2 Web API с использованием EF Core 2.
djangojazz
Тоже самое. ВDotNetCliToolReference Tools.DotNet было ключевым в моем случае
blfuentes 03
Это устранило мою проблему, та же проблема с веб-API NET Core 2 с использованием EF Core 2
Deluq
32

Это распространенная проблема при переходе с .NET Core 1.0 на .NET Core 1.1+ или 2.x.

Чтобы это исправить, вам необходимо:

  • Получите библиотеки пакетов Microsoft.EntityFrameworkCore.Tools и Microsoft.EntityFrameworkCore.Tools.DotNet с помощью NuGet.
  • Вручную добавьте ссылку на этот пакет в файл конфигурации проекта project.json(для .NET Core 1.0) или <projectName>.csproj(для .NET Core 1.1+ и 2.x).

В частности, для проектов .NET Core 1.0 добавьте следующее:

"tools": {
   "Microsoft.EntityFrameworkCore.Tools": "1.0.0"
   "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
 }

Для проектов .NET Core 1.1+ и .NET Core 2.x добавьте следующее:

<ItemGroup>
  <DotNetCliToolReference 
      Include="Microsoft.EntityFrameworkCore.Tools" 
      Version="2.0.0" />
  <DotNetCliToolReference 
      Include="Microsoft.EntityFrameworkCore.Tools.DotNet" 
      Version="2.0.0" />
</ItemGroup>

Если у вас уже есть toolsключ json или <ItemGroup>элемент с одним или несколькими существующими DotNetCliToolReferenceэлементами, просто добавьте новые в существующую группу.

ВАЖНО : кроме выполнения вышеуказанных шагов, вы должны запустить dotnet efкоманду в корневой папке проекта (той, которая содержит файл проекта), иначе она не сработает.

Для получения дополнительной информации и подробного объяснения проблемы вы можете прочитать больше в моем сообщении в блоге .

Darkseal
источник
Спасибо, друг, ты спасешь день :)
marvelTracker
Как запустить команду dotnet ef в корневой папке проекта?
Ян Уорбертон
1
@IanWarburton, указав C:\Program Files\dotnetв переменной окружения PATH ИЛИ используя полный путь, то есть C:\Program Files\dotnet\dotnet.exe
Darkseal
У меня работал в .NET Core 2.0. Принятое решение у меня не сработало. ВАЖНЫЙ раздел помог мне. Благодарю.
mpatel
18

Думаю, я нашел точное решение проблемы - dotnet: не найдено исполняемого файла, соответствующего команде "dotnet-ef" ..

Я использую dot net core 2.0 в VS 2017 Versio 15.5.3

Причина этой ошибки

Эта ошибка вызвана тем , что NuGet это не в состоянии найти в файл решения на месте.

Решение: - Перейдите в каталог, в котором находится класс Startup.cs.

  1. Я перешел в корень , добавив следующую команду в консоль диспетчера пакетов .

    компакт-диск. \ School1

Здесь 'School1' был моим корневым каталогом проекта, и он содержит мой класс 'Startup.cs', в вашем случае он будет другим.

  1. Затем запустите команду dotnet efв консоли диспетчера пакетов, которая теперь будет работать успешно.

Пример с картинками для ясного понимания

  1. У меня ошибка Ошибка при запуске dotnet ef. введите описание изображения здесь

  2. Исправил ошибку, перейдя в корневую папку командой cd .\School1

Надеюсь, это поможет моим коллегам-разработчикам Dot Net.

введите описание изображения здесь

йогихостинг
источник
1
да, это помогло мне решить подобную проблему, с которой я столкнулся. Спасибо.
пн
1
это помогает мне в некоторой степени. В моем случае, чтобы решить эту проблему, я также следую ответу @Michael Freidgeim
Салех Энам Шохаг
12

Пришлось добавить Microsoft.EntityFrameworkCore.Tools. DotNet для работы. Раздел инструментов вашего файла project.json будет выглядеть так:

"tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final",
    "Microsoft.EntityFrameworkCore.Tools":"1.1.0-preview4-final",
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
},
Александр Свиокло
источник
Нет "Microsoft.EntityFrameworkCore.Tools.DotNet"
Эльвин Мамедов
2
Существует ... в графическом интерфейсе "Просмотр через управление пакетами NuGet" поисковый запрос .Tools.DotNet отобразит его. Последний предварительный выпуск - 1.1.0-preview4-final.
K7Buoy
4

Если вы столкнулись с этой проблемой и запустите ядро ​​asp.net с помощью инструмента CLI, вы можете решить ее, добавив <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> в файл xx.csproj и dotnet restore . Затем вы можете использовать команду dotnet ef.

Дофин
источник
Я действительно столкнулся с той же проблемой. Я использовал 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet и обновил файл proj, перезагрузил проект, а затем повторно протестировал, и он сработал. Благодаря!
Майлз
1

Вместо того, чтобы открывать отдельное окно консоли в VS Package Manager Console, введите и выполните следующие команды:

Добавить миграцию

Add-Migration <migration name>

Удалить последнюю миграцию

Remove-Migration

Перед применением миграции (или, чтобы применить миграцию):

Update-Database

Когда была применена миграция:

Update-Database -Migration <previous migration> -Context <db context name>

HTH

РЕДАКТИРОВАТЬ : вам также может понадобиться следующий класс в вашем основном проекте MVC:

public class DbContextFactory : IDesignTimeDbContextFactory<NotesContext>
{
    public YourDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<YourDbContext>();
        builder.UseSqlServer("DefaultConnection", optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(YourDbContext).GetTypeInfo().Assembly.GetName().Name));
        return new YourDbContext(builder.Options);
    }
}
Александр Христов
источник
1

В моем случае dotnet efне было доступно и не отображается в списке при dotnet -hзапуске.

Я установил глобально dotnet-ef с помощью следующей команды, и теперь я могу ее использовать. Но все еще не в списке.

dotnet tool install -g dotnet-ef 
HasanG
источник
0

Я использовал отдельный проект библиотеки классов. После попытки и неудачи всего вышеперечисленного в консоли диспетчера пакетов. Я использовал командную строку, и она сработала! Странно. Однако следует отдать должное этой статье . И если вы используете отдельный проект библиотеки классов, это ваше решение.

Мохсин
источник
0

В Visual Studio 2017 мне нужно было запустить эти команды из консоли диспетчера пакетов

install-package Microsoft.EntityFrameworkCore.SqlServer.Design

Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
Кириакос
источник
0

В разделе инструментов добавьте ниже код,

 "tools": {

    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final",

    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {

      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+dnxcore50"
    }
  }

Этот формат кода решил мою ошибку.

Т-Джаянт Доре
источник
0

По умолчанию при добавлении NuGet Pkg он будет добавлен как PackageReference, это неверно, поэтому отредактируйте его вручную

1- Редактировать файл .csproj

2- изменить с "PackageReference":

<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
to:
<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
Луис
источник