entity-framework asp.net-core asp.net-core-1.0

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''

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

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

  1. Recibí un error Error al ejecutar dotnet ef .

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