Estoy haciendo una muestra de proyecto usando ASP.Net Core RC2 con Microsoft.EntityFramework.Core
y 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.json
configuració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%" ]
}
}
Respuestas:
Entity Framework Core 1.0
Solo debe actualizar la
tools
secció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 ef
comandos estén disponibles.Importante
También debo señalar aquí que los
dotnet ef
comandos 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.Tools
dependencia con laMicrosoft.EntityFrameworkCore.Tools.DotNet
versión1.1.0-preview4
. Tampoco es necesario conservar laimports
secció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 .fuente
project.json
fue mi problema, ¡gracias!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
fuente
VS2017
y se actualizó automáticamentedotnet core CLI
a la2.0
versión que no es compatible condotnet core 1.0
. Pero parece que es el momento de actualizar mi proyecto.net core 1.0
a2.0
.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
fuente
DotNetCliToolReference
con Tools.DotNet fue la clave en mi casoEste es un problema común al cambiar de .NET Core 1.0 a .NET Core 1.1+ o 2.x.
Para solucionarlo, necesita:
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
tools
clave json o un<ItemGroup>
elemento con uno o másDotNetCliToolReference
elementos existentes , simplemente agregue los nuevos al grupo existente.IMPORTANTE : además de realizar los pasos anteriores, debe ejecutar el
dotnet ef
comando 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 .
fuente
C:\Program Files\dotnet
en la variable de entorno PATH O al usar la ruta completa, es decirC:\Program Files\dotnet\dotnet.exe
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
Este error se produce porque el Nuget es no poder encontrar el archivo de la solución de la ubicación.
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.
dotnet ef
en la Consola del Administrador de paquetes, que ahora se ejecutará correctamente.Recibí un error Error al ejecutar
dotnet ef
.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.
fuente
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" },
fuente
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 ydotnet restore
. Entonces puede usar el comando dotnet ef.fuente
En lugar de abrir una ventana de consola separada en VS Package Manager Console, escriba y ejecute los siguientes comandos:
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); } }
fuente
En mi caso
dotnet ef
, no estaba disponible y no se muestra en la lista cuandodotnet -h
se 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
fuente
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.
fuente
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"
fuente
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.
fuente
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>
fuente