Ни один исполняемый файл не нашел совпадающую команду "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%" ]
}
}
Ответы
Ответ 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'
Я перешел в корневой каталог, добавив приведенную ниже команду command на своей консоли диспетчера пакетов.
cd.\School1
Здесь "School1" был моим корневым каталогом проекта, и он содержит мой класс "Startup.cs", в вашем случае он будет другим.
- Затем запустите команду
dotnet ef
на консоли диспетчера пакетов, которая теперь будет выполнена успешно.
Пример с картинками для ясного понимания
Я получил ошибку Ошибка при запуске dotnet ef
.
![enter image description here]()
Я исправил ошибку, переместившись в корневую папку с помощью команды 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