web-dev-qa-db-fra.com

Aucun exécutable trouvé correspondant à la commande "dotnet-ef"

Je fais un exemple de projet en utilisant ASP.Net Core RC2 avec Microsoft.EntityFramework.Core et SQLite.

J'ai suivi ce tutoriel: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

Mais quand je lance cette commande:

dotnet ef migrations add FirstMigration

J'ai eu cette erreur:

No executable found matching command "dotnet-ef"

Voici ma configuration 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%" ]
  }
}
79
Redplane

Entity Framework Core 1.0

Vous devriez juste avoir besoin de mettre à jour la section tools de votre fichier project.json pour inclure ceci:

"Microsoft.EntityFrameworkCore.Tools": {
  "version": "1.0.0-preview1-final",
  "imports": [
    "portable-net45+win8+dnxcore50",
    "portable-net45+win8"
  ]
}

Cela devrait rendre les commandes dotnet ef disponibles.

Important

Je dois également noter ici que les commandes dotnet ef ne seront disponibles que si elles sont exécutées à partir du même répertoire que le fichier project.json.

Entity Framework Core 1.1
Si vous rencontrez de nouveau ce problème après la mise à niveau vers Entity Framework Core 1.1, veillez à remplacer la dépendance Microsoft.EntityFrameworkCore.Tools par Microsoft.EntityFrameworkCore.Tools.DotNet version 1.1.0-preview4. Il n'est pas nécessaire de conserver la section imports. Pour plus d'informations à ce sujet, voir la rubrique "Mise à niveau vers la version 1.1" sous la rubrique publication du blog d'annonce de la version d'Entity Framework Core 1.1 .

60
Daniel Grim

Entity Framework Core 1.1

Ajout si vous utilisez VS2017 avec les nouveaux projets .csproj sans fichier project.json

vous devez éditer le fichier .csproj (cliquez dessus avec le bouton droit de la souris dans l'explorateur de solutions, puis cliquez sur éditer what.csproj), puis collez-le dans

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
      <Version>1.0.0-*</Version>
    </DotNetCliToolReference>
  </ItemGroup>

courtoisie de: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967

56
mwoa

Spécifique à VS2017 15.3 ou version ultérieure et ASP.NET CORE 2.0 ou version ultérieure ...

Installez nuget for db provider via la ligne de commande ou le gestionnaire de packages de nuget.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Ajouter la section suivante à .csproj

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" 
    Version="2.0.0" />
</ItemGroup>

Installez les outils de conception via le gestionnaire de ligne de commande ou de nuget dans VS2017.

dotnet add package Microsoft.EntityFrameworkCore.Design

Cela active dotnet ef * sur la ligne de commande dans le répertoire du projet.

Active les commandes dotnet ef * sur la ligne de commande dans le répertoire du projet,

dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold 
38
Joe Healy

Il s'agit d'un problème courant lors du passage de .NET Core 1.0 à .NET Core 1.1+ ou 2.x.

Pour résoudre ce problème, vous devez:

  • Obtenez le Microsoft.EntityFrameworkCore.Tools et Microsoft.EntityFrameworkCore.Tools.DotNet des bibliothèques de paquets utilisant NuGet.
  • Ajoutez manuellement une référence à ce package dans votre fichier de configuration de projet project.json (pour .NET Core 1.0) ou <projectName>.csproj (pour .NET Core 1.1+ & 2.x).

Plus spécifiquement, pour les projets .NET Core 1.0, ajoutez ceci:

"tools": {
   "Microsoft.EntityFrameworkCore.Tools": "1.0.0"
   "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
 }

Pour les projets .NET Core 1.1+ et .NET Core 2.x, ajoutez ceci:

<ItemGroup>
  <DotNetCliToolReference 
      Include="Microsoft.EntityFrameworkCore.Tools" 
      Version="2.0.0" />
  <DotNetCliToolReference 
      Include="Microsoft.EntityFrameworkCore.Tools.DotNet" 
      Version="2.0.0" />
</ItemGroup>

Si vous avez déjà une clé tools json ou un élément <ItemGroup> avec un ou plusieurs éléments DotNetCliToolReference existants, ajoutez simplement les nouveaux au groupe existant.

IMPORTANT: outre les opérations ci-dessus, vous devez lancer la commande dotnet ef dans le dossier racine du projet (celui contenant le fichier de projet), sinon cela ne fonctionnera pas.

Pour plus d'informations et une explication détaillée du problème, vous pouvez en lire plus sur mon blog .

31
Darkseal

Je pense avoir trouvé la solution exacte du problème - dotnet: Aucun exécutable trouvé ne correspond à la commande "dotnet-ef " ..

J'utilise dot net core 2.0 dans VS 2017 version 15.5.3

Cause de cette erreur

Cette erreur est due au fait que le Nuget n’est pas incapable de trouver le fichier de solution sur l'emplacement.

Solution: - Accédez au répertoire dans lequel vous avez la classe 'Startup.cs'

  1. Je me suis déplacé à la racine en ajoutant la commande ci-dessous sur votre Console du gestionnaire de packages .

    cd.\école1

Ici 'School1' était mon répertoire racine du projet, et il contient ma classe 'Startup.cs', elle sera différente dans votre cas.

  1. Ensuite, exécutez la commande dotnet ef sur Console Package Manager , qui s'exécutera correctement.

Exemple avec images pour une meilleure compréhension

  1. J'ai une erreur Erreur lors de l'exécution de dotnet ef. enter image description here

  2. J'ai corrigé l'erreur en passant au dossier racine avec la commande cd .\School1

J'espère que cela aidera mes collègues développeurs Dot Net.

enter image description here

18
yogihosting

Je devais ajouter Microsoft.EntityFrameworkCore.Tools .DotNet pour fonctionner. La section outils de votre fichier project.json ressemblera à ceci:

"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"
},
12
Alexandre Swioklo

Si vous rencontrez ce problème et exécutez l'outil de base asp.net avec CLI, vous pouvez le résoudre en ajoutant <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> dans le fichier xx.csproj et dotnet restore. Ensuite, vous pouvez utiliser la commande dotnet ef.

4
Dauphin

Au lieu d'ouvrir une fenêtre de console séparée dans le type de console VS Package Manager, exécutez les commandes suivantes:

Ajouter une migration

Add-Migration <migration name>

Supprimer la dernière migration

Remove-Migration

Avant qu'une migration ait été appliquée (ou, pour appliquer une migration):

Update-Database

Lorsque la migration a été appliquée:

Update-Database -Migration <previous migration> -Context <db context name>

HTH

EDIT: Vous aurez peut-être également besoin de la classe suivante dans votre projet 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);
    }
}
1
Alexander Christov

Par défaut, lors de l'ajout d'un NuGet Pkg, il sera ajouté en tant que référence de paquet. C'est faux, modifiez-le manuellement.

1- Éditer le fichier .csproj

2- changement 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>
0
Luis

J'utilisais un projet de bibliothèque de classe séparé. Après avoir essayé et échoué tout ce qui précède dans la console du gestionnaire de paquets. J'ai utilisé la commande Invite, et cela a fonctionné! Bizarre. Cependant, le crédit va à cet article . Et si vous utilisez un projet de bibliothèque de classes séparé, This est votre solution.

0
Mohsin

Sous Visual Studio 2017, je devais exécuter ces commandes à partir de la console du gestionnaire de packages.

install-package Microsoft.EntityFrameworkCore.SqlServer.Design

Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
0
Kyriacos

Dans la section outils, ajoutez ci-dessous le code,

 "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"
    }
  }

Ce format de code a résolu mon erreur.

0
T-Jayanth Dore