entity framework - No se encontró ningún ejecutable que coincida con el comando "dotnet-ef"
entity-framework asp.net-core (12)
Creo que he encontrado la solución precisa para el problema: dotnet: no se encontró ningún ejecutable que coincida con el comando "dotnet-ef" .
Estoy usando dot net core 2.0 en VS 2017 versio 15.5.3
Causa de este error
Este error se debe a que Nuget no puede encontrar el archivo de solución en la ubicación.
Solución: vaya al directorio donde tiene la clase ''Startup.cs''
-
Me mudé a la raíz agregando el siguiente comando en la consola de Package Manager .
cd. / School1
Aquí ''School1'' era mi directorio raíz del proyecto, y contiene mi clase ''Startup.cs'', será diferente en su caso.
-
Luego ejecute el comando
dotnet ef
en la Consola del Administrador de paquetes, que ahora se ejecutará con éxito.
Ejemplo con imágenes para una comprensión clara
-
Corrija el error moviéndome a la carpeta raíz con el comando
cd ./School1
Espero que ayude a mis compañeros desarrolladores de Dot Net.
Estoy haciendo una muestra de proyecto usando ASP.Net Core RC2 con
Microsoft.EntityFramework.Core
y SQLite.
He seguido este tutorial: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/
Pero, cuando ejecuto este comando:
dotnet ef migrations add FirstMigration
Tengo este error:
No executable found matching command "dotnet-ef"
Aquí está mi configuración
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%" ]
}
}
En Visual Studio 2017, necesitaba ejecutar estos comandos desde la consola del administrador de paquetes
install-package Microsoft.EntityFrameworkCore.SqlServer.Design
Scaffold-DbContext "Server=./sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
En la sección de herramientas, agregue el siguiente código,
"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"
}
}
Este formato de código resolvió mi error.
En lugar de abrir una ventana de consola separada en el tipo de consola VS Package Manager y ejecutar los siguientes comandos:
Agregar migración
Add-Migration <migration name>
Eliminar la última migración
Remove-Migration
Antes de aplicar una migración (o, para aplicar la migración):
Update-Database
Cuando se ha aplicado la migración:
Update-Database -Migration <previous migration> -Context <db context name>
HTH
EDITAR : También puede necesitar la siguiente clase en su proyecto principal de 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);
}
}
Específico para VS2017 15.3 o superior y ASP.NET CORE 2.0 o posterior ...
Instale nuget para el proveedor de db a través de la línea de comandos o el administrador de paquetes nuget.
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Agregue la siguiente sección a .csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
Instale herramientas de tiempo de diseño a través de la línea de comandos o el administrador nuget en VS2017.
dotnet add package Microsoft.EntityFrameworkCore.Design
Esto habilita dotnet ef * en la línea de comando en el directorio del proyecto.
Habilita los comandos dotnet ef * en la línea de comandos en el directorio del proyecto,
dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold
Estaba usando un proyecto de biblioteca de clase por separado. Después de intentar y fallar todo lo anterior en la consola del administrador de paquetes. Usé el símbolo del sistema, ¡y funcionó! Extraño. Sin embargo, el crédito va a este artículo . Y si está utilizando un proyecto de biblioteca de clases por separado, This es su solución.
Este es un problema común al cambiar de .NET Core 1.0 a .NET Core 1.1+ o 2.x.
Para arreglar eso, necesitas:
- Obtenga las bibliotecas de paquetes Microsoft.EntityFrameworkCore.Tools y Microsoft.EntityFrameworkCore.Tools.DotNet con NuGet.
-
Agregue manualmente una referencia a este paquete dentro de su archivo de configuración de proyecto
project.json
(para .NET Core 1.0) o<projectName>.csproj
(para .NET Core 1.1+ y 2.x).
Más específicamente, para proyectos .NET Core 1.0, agregue esto:
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0"
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
}
Para los proyectos .NET Core 1.1+ y .NET Core 2.x, agregue esto:
<ItemGroup>
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools"
Version="2.0.0" />
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
Si ya tiene una clave json de
tools
o un elemento
<ItemGroup>
con uno o más elementos
DotNetCliToolReference
existentes, simplemente agregue los nuevos al grupo existente.
IMPORTANTE
: además de realizar los pasos anteriores, debe iniciar el comando
dotnet ef
dentro de la carpeta raíz del proyecto (la que contiene el archivo del proyecto), de lo contrario no funcionará.
Para obtener información adicional y una amplia explicación del problema, puede leer más en mi blog .
Por defecto, al agregar un paquete NuGet, se agregará como PackageReference, esto es incorrecto, así que edítelo manualmente
1- Editar archivo .csproj
2- cambio desde "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>
Si encontró este problema y ejecuta el núcleo asp.net con la herramienta CLI, puede resolverlo agregando
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
en el archivo xx.csproj, y
dotnet restore
.
Entonces puedes usar el comando dotnet ef.
Tuve que agregar Microsoft.EntityFrameworkCore.Tools. DotNet para trabajar. La sección de herramientas de su archivo project.json se verá así:
"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"
},
Entity Framework Core 1.0
Solo debe actualizar la sección de
tools
de su archivo project.json para incluir esto:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
Esto debería hacer que los comandos
dotnet ef
estén disponibles.
Importante
También debo señalar aquí que los comandos
dotnet ef
solo estarán disponibles cuando se ejecuten desde el mismo directorio que contiene el archivo project.json.
Entity Framework Core 1.1
Si tiene este problema nuevamente después de actualizar a Entity Framework Core 1.1, asegúrese de reemplazar la dependencia
Microsoft.EntityFrameworkCore.Tools.DotNet
con
Microsoft.EntityFrameworkCore.Tools.DotNet
versión
1.1.0-preview4
.
Tampoco es necesario mantener la sección de
imports
.
Para obtener más información sobre esto, consulte el encabezado "Actualización a 1.1" en la
publicación de blog de anuncio de lanzamiento de Entity Framework Core 1.1
.
Entity Framework Core 1.1
Agregando esto si está usando VS2017 con los nuevos proyectos .csproj sin un archivo project.json
necesita editar el archivo .csproj (haga clic con el botón derecho en el explorador de soluciones y haga clic en editar lo que sea.csproj) y luego péguelo en
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
<Version>1.0.0-*</Version>
</DotNetCliToolReference>
</ItemGroup>
cortesía de: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967