No se encontró ningún ejecutable que coincida con el comando "dotnet-ef"

82

Estoy haciendo una muestra de proyecto usando ASP.Net Core RC2 con Microsoft.EntityFramework.Corey SQLite.

Seguí 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 project.jsonconfiguración:

{
  "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%" ]
  }
}
Redplane
fuente
Este anuncio muestra cómo debería verse su project.json en RC2 si está utilizando herramientas: github.com/aspnet/Announcements/issues/172
Pawel

Respuestas:

60

Entity Framework Core 1.0

Solo debe actualizar la toolssección 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 dotnet efcomandos estén disponibles.

Importante

También debo señalar aquí que los dotnet efcomandos 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 Microsoft.EntityFrameworkCore.Toolsdependencia con la Microsoft.EntityFrameworkCore.Tools.DotNetversión 1.1.0-preview4. Tampoco es necesario conservar la importssección. Para obtener más información sobre esto, consulte el encabezado "Actualización a 1.1" en la publicación de blog del anuncio de lanzamiento de Entity Framework Core 1.1 .

Daniel Grim
fuente
Muchas gracias: D
Redplane
22
No estar en la carpeta con project.jsonfue mi problema, ¡gracias!
kitsu.eb
6
No me funciona. Sigo recibiendo el mismo error.
Nikola Schou
1
@NikolaSchou También tienes que volver a abrir cmd.
Tyler
1
@Adrian, gracias también. Después de mucho tiempo vuelvo a .net core. Me enfrenté al viejo problema cuando hice esta pregunta. Muy divertido
Redplane
56

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

mwoa
fuente
funciona pero, necesita saber la versión correcta. Como soy nuevo, también fue muy difícil para mí encontrar la versión correcta. Entonces, cualquiera que siga la respuesta conocerá su versión de Microsoft.EntityFrameworkCore.Tools.DotNet y coloque la etiqueta de versión. es decir, <Version> 2.0.3 </Version>
Saleh Enam Shohag
Esto realmente me salva el día. ¡Gracias! Actualicé VS2017y se actualizó automáticamente dotnet core CLIa la 2.0versión que no es compatible con dotnet core 1.0. Pero parece que es el momento de actualizar mi proyecto .net core 1.0a 2.0.
Boooooooooms
40

Específico para VS2017 15.3 o posterior 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 de 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 
Joe Healy
fuente
2
Excelente respuesta, estaba buscando todo y la sección sobre agregar al 'ItemGroup' era lo que realmente me estaba bloqueando en la API web de .NET Core 2 usando EF Core 2.
djangojazz
Igual que aquí. El DotNetCliToolReference con Tools.DotNet fue la clave en mi caso
blfuentes
Esto solucionó mi problema, el mismo problema con la API web de NET Core 2 usando EF Core 2
Deluq
32

Este es un problema común al cambiar de .NET Core 1.0 a .NET Core 1.1+ o 2.x.

Para solucionarlo, necesita:

  • Obtenga las bibliotecas de paquetes Microsoft.EntityFrameworkCore.Tools y Microsoft.EntityFrameworkCore.Tools.DotNet mediante NuGet.
  • Agregue manualmente una referencia a este paquete dentro del archivo de configuración del 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 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 toolsclave json o un <ItemGroup>elemento con uno o más DotNetCliToolReferenceelementos existentes , simplemente agregue los nuevos al grupo existente.

IMPORTANTE : además de realizar los pasos anteriores, debe ejecutar el dotnet efcomando 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 explicación detallada del problema, puede leer más en la publicación de mi blog .

Darkseal
fuente
Gracias amigo, salvaste el día :)
marvelTracker
¿Cómo se ejecuta el comando dotnet ef dentro de la carpeta raíz del proyecto?
Ian Warburton
1
@IanWarburton al tener C:\Program Files\dotneten la variable de entorno PATH O al usar la ruta completa, es decir C:\Program Files\dotnet\dotnet.exe
Darkseal
Me funcionó en .NET Core 2.0. La solución aceptada no funcionó para mí. La sección IMPORTANTE hizo el truco para mí. Gracias.
mpatel
18

Creo que he encontrado la solución precisa para el problema - dotnet: No se encontró ningún ejecutable 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 produce porque el Nuget es no poder encontrar el archivo de la solución de 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 del Administrador de paquetes .

    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 efen la Consola del Administrador de paquetes, que ahora se ejecutará correctamente.

Ejemplo con imágenes para una comprensión clara

  1. Recibí un error Error al ejecutar dotnet ef. ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

yogui
fuente
1
sí, esto me ayudó a solucionar un tipo de problema similar al que estaba enfrentando. Gracias.
mns
1
me ayuda en cierta medida. Para que mi caso resuelva el problema, también sigo la respuesta de
@Michael Freidgeim
12

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"
},
Alexandre Swioklo
fuente
No hay "Microsoft.EntityFrameworkCore.Tools.DotNet"
Elvin Mammadov
2
Hay ... en Explorar a través de la GUI Administrar paquetes NuGet, el término de búsqueda .Tools.DotNet lo mostrará. La última versión preliminar es 1.1.0-preview4-final.
K7Buoy
4

Si se encontró con este problema y ejecuta asp.net core con la herramienta CLI, puede resolverlo agregando <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> al archivo xx.csproj y dotnet restore . Entonces puede usar el comando dotnet ef.

Delfín
fuente
De hecho, me encontré con el mismo problema. Estaba usando 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet, y actualicé el archivo del proyecto, volví a cargar el proyecto y luego volví a probar y funcionó. ¡Gracias!
Miles
1

En lugar de abrir una ventana de consola separada en VS Package Manager Console, escriba y ejecute los siguientes comandos:

Agregar migración

Add-Migration <migration name>

Eliminar la última migración

Remove-Migration

Antes de que se haya aplicado 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 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);
    }
}
Alexander Christov
fuente
1

En mi caso dotnet ef, no estaba disponible y no se muestra en la lista cuando dotnet -hse ejecuta.

He instalado globalmente dotnet-ef con el siguiente comando y ahora puedo usarlo. Pero todavía no está en la lista.

dotnet tool install -g dotnet-ef 
HasanG
fuente
0

Estaba usando un proyecto de biblioteca de clases 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 es para este artículo . Y si está utilizando un proyecto de biblioteca de clases separado, esta es su solución.

Mohsin
fuente
0

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"
Kyriacos
fuente
0

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.

T-Jayanth Dore
fuente
0

De forma predeterminada, al agregar un paquete NuGet, se agregará como PackageReference, esto es incorrecto, así que edítelo manualmente

1- Editar archivo .csproj

2- cambio de "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>
Luis
fuente