Не знайдено виконуваної команди, що відповідає команді “dotnet-ef”


82

Я роблю зразок проекту за допомогою ASP.Net Core RC2 з Microsoft.EntityFramework.Coreта SQLite.

Я дотримувався цього підручника: 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%" ]
  }
}

Це оголошення показує, як повинен виглядати ваш 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
У мене це не працює. Я постійно отримую ту саму помилку.
Nikola Schou

@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 core. Я зіткнувся зі старою проблемою, коли поставив це запитання. Так смішно
Редплан

56

Ядро сутності 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 і вводять тег версії. тобто <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 для постачальника баз даних за допомогою командного рядка або менеджера пакетів 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" - це те, що насправді блокувало для веб-API .NET Core 2 за допомогою EF Core 2.
djangojazz,

Те ж саме. DotNetCliToolReference З Tools.DotNet був ключовим в моєму випадку
blfuentes

Це вирішило мою проблему, та ж проблема з веб-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команду в кореневій папці проекту (у тій, що містить файл проекту), інакше вона не буде працювати.

Для отримання додаткової інформації та детального пояснення проблеми ви можете прочитати більше в моєму дописі в блозі .


Спасибі, товаришу, ти врятував день :)
marvelTracker

Як запустити команду dotnet ef у кореневій папці проекту?
Ian Warburton,

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 проти 15.5.3

Причина цієї помилки

Ця помилка викликана тим , що NuGet це НЕ в змозі знайти в файл рішення на місці.

Рішення: - Перейдіть до каталогу, де є клас "Startup.cs"

  1. Я Переїхав в корінь , додавши нижче команду на вашій Package Manager Console .

    cd. \ School1

Тут 'School1' був моїм кореневим каталогом проекту, і він містить мій клас 'Startup.cs', у вашому випадку він буде іншим.

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

Приклад із картинками для чіткого розуміння

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

  2. Я виправив помилку, перейшовши до кореневої папки за допомогою команди cd .\School1

Сподіваюся, це допоможе моїм колегам розробникам Dot Net.

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


1
так, це допомогло мені виправити подібний тип проблеми, з якою я стикався. Дякую.
пн.

1
це мені певною мірою допомагає. Для моєї справи для вирішення проблеми я також слідую відповіді @Michael Freidgeim
Saleh Enam Shohag

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 і виконувати такі команди:

Додати міграцію

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 

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.