Подтвердить что ты не робот

Ни один исполняемый файл не нашел совпадающую команду "dotnet-ef"

Я делаю образец проекта, используя 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%" ]
  }
}
4b9b3361

Ответ 1

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,.

Ответ 2

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

Ответ 3

Специально для 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 

Ответ 4

Это распространенная проблема при переходе с .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 в корневой папке проекта (той, которая содержит файл проекта), иначе она не будет работать.

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

Ответ 5

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

Я использую Dot Net Core 2.0 в VS 2017 версии 15.5.3

Cause of this error

Эта ошибка вызвана тем, что Nuget is не может найти файл решения в расположении.

Решение: - Перейдите в каталог, где у вас есть класс 'Startup.cs'

  1. Я перешел в корневой каталог, добавив приведенную ниже команду command на своей консоли диспетчера пакетов.

    cd.\School1

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

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

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

  1. Я получил ошибку Ошибка при запуске dotnet ef. enter image description here

  2. Я исправил ошибку, переместившись в корневую папку с помощью команды cd .\School1

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

enter image description here

Ответ 6

Мне пришлось добавить 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"
},

Ответ 7

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

Ответ 8

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

Добавить перенос

Add-Migration <migration name>

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

Remove-Migration

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

Update-Database

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

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

НТН

EDIT. Возможно, вам также понадобится следующий класс в основном проекте 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);
    }
}

Ответ 9

В 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"

Ответ 10

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

Ответ 11

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

 "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"
    }
  }

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

Ответ 12

По умолчанию при добавлении 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>

Ответ 13

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

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

dotnet tool install -g dotnet-ef