Keine ausführbare Datei gefunden passenden Befehl "dotnet-ef"

82

Ich mache ein Projektbeispiel mit ASP.Net Core RC2 mit Microsoft.EntityFramework.Coreund SQLite.

Ich habe dieses Tutorial befolgt: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

Aber wenn ich diesen Befehl ausführe:

dotnet ef migrations add FirstMigration

Ich habe diesen Fehler erhalten:

No executable found matching command "dotnet-ef"

Hier ist meine project.jsonKonfiguration:

{
  "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
quelle
Diese Ankündigung zeigt, wie Ihre project.json in RC2 aussehen sollte, wenn Sie Tools verwenden: github.com/aspnet/Announcements/issues/172
Pawel

Antworten:

60

Entity Framework Core 1.0

Sie müssen nur den toolsAbschnitt Ihrer Datei project.json aktualisieren, um Folgendes einzuschließen:

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

Dies sollte die dotnet efBefehle verfügbar machen.

Wichtig

Ich sollte hier auch beachten, dass die dotnet efBefehle nur verfügbar sind, wenn sie aus demselben Verzeichnis ausgeführt werden, das die Datei project.json enthält.

Entity Framework Core 1.1
Wenn dieses Problem nach dem Upgrade auf Entity Framework Core 1.1 erneut auftritt, müssen Sie die Microsoft.EntityFrameworkCore.ToolsAbhängigkeit durch die Microsoft.EntityFrameworkCore.Tools.DotNetVersion ersetzen 1.1.0-preview4. Es ist auch nicht erforderlich, den importsAbschnitt beizubehalten. Weitere Informationen hierzu finden Sie in der Überschrift "Upgrade auf 1.1" unter dem Blogbeitrag zur Ankündigung der Veröffentlichung von Entity Framework Core 1.1 .

Daniel Grim
quelle
Vielen Dank: D
Redplane
22
Nicht im Ordner zu sein project.jsonwar mein Problem, danke!
Kitsu.eb
6
Es funktioniert nicht bei mir. Ich bekomme immer den gleichen Fehler.
Nikola Schou
1
@NikolaSchou Sie müssen auch cmd erneut öffnen.
Tyler
1
@ Adrian, danke auch. Nach langer Zeit komme ich zurück zum .net-Kern. Ich war mit dem alten Problem konfrontiert, als ich diese Frage stellte. So lustig
Redplane
56

Entity Framework Core 1.1

Fügen Sie dies hinzu, wenn Sie VS2017 mit den neuen .csproj-Projekten ohne project.json-Datei verwenden

Sie müssen die .csproj-Datei bearbeiten (klicken Sie im Lösungs-Explorer mit der rechten Maustaste darauf und klicken Sie auf "egal was.csproj bearbeiten") und fügen Sie diese dann ein

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

Mit freundlicher Genehmigung von: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967

mwoa
quelle
es funktioniert aber muss die richtige version kennen. Da ich neu bin, war es für mich auch sehr schwierig, die richtige Version herauszufinden. Jeder, der der Antwort folgt, kennt Ihre Microsoft.EntityFrameworkCore.Tools.DotNet-Version und fügt das Versions-Tag ein. dh <Version> 2.0.3 </ Version>
Saleh Enam Shohag
Das rettet mir wirklich den Tag. Vielen Dank! Ich habe aktualisiert VS2017und es wurde automatisch dotnet core CLIauf eine 2.0Version aktualisiert , die nicht mit kompatibel ist dotnet core 1.0. Aber es scheint an der Zeit zu sein, mein Projekt .net core 1.0zu aktualisieren 2.0.
Boooooooooms
40

Speziell für VS2017 15.3 oder höher und ASP.NET CORE 2.0 oder höher ...

Installieren Sie nuget for db provider über die Befehlszeile oder den nuget package manager.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Fügen Sie folgenden Abschnitt zu .csproj hinzu

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

Installieren Sie die Entwurfszeit-Tools über die Befehlszeile oder den Nuget-Manager in VS2017.

dotnet add package Microsoft.EntityFrameworkCore.Design

Dies aktiviert dotnet ef * in der Befehlszeile im Projektverzeichnis.

Aktiviert dotnet ef * -Befehle in der Befehlszeile im Projektverzeichnis.

dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold 
Joe Healy
quelle
2
Tolle Antwort, ich habe alles gesucht und der Abschnitt zum Hinzufügen zur 'ItemGroup' war das, was mich auf der .NET Core 2-Web-API mit EF Core 2 wirklich blockierte.
djangojazz
Hier gilt das gleiche. Das DotNetCliToolReference mit Tools.DotNet war der Schlüssel in meinem Fall
blfuentes
Dies hat mein Problem behoben. Gleiches Problem mit der NET Core 2 Web API unter Verwendung von EF Core 2
Deluq
32

Dies ist ein häufiges Problem beim Wechsel von .NET Core 1.0 zu .NET Core 1.1+ oder 2.x.

Um dies zu beheben, müssen Sie:

  • Rufen Sie die Paketbibliotheken Microsoft.EntityFrameworkCore.Tools und Microsoft.EntityFrameworkCore.Tools.DotNet mit NuGet ab.
  • Fügen Sie manuell einen Verweis auf dieses Paket in Ihre Projektkonfigurationsdatei project.json(für .NET Core 1.0) oder <projectName>.csproj(für .NET Core 1.1+ & 2.x) ein.

Fügen Sie für .NET Core 1.0-Projekte Folgendes hinzu:

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

Fügen Sie für .NET Core 1.1+ - und .NET Core 2.x-Projekte Folgendes hinzu:

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

Wenn Sie bereits einen toolsJSON-Schlüssel oder ein <ItemGroup>Element mit einem oder mehreren vorhandenen DotNetCliToolReferenceElementen haben, fügen Sie einfach die neuen zur vorhandenen Gruppe hinzu.

WICHTIG : Abgesehen von den oben genannten Schritten müssen Sie den dotnet efBefehl im Projektstammordner (der die Projektdatei enthält) starten , da er sonst nicht funktioniert.

Weitere Informationen und eine ausführliche Erläuterung des Problems finden Sie in meinem Blogbeitrag .

Darkseal
quelle
Danke Kumpel, du
rettest
Wie starte ich den Befehl dotnet ef im Projektstammordner?
Ian Warburton
1
@ IanWarburton durch C:\Program Files\dotnetin der PATH Umgebungsvariable ODER unter Verwendung des vollständigen Pfades, dh C:\Program Files\dotnet\dotnet.exe
Darkseal
Arbeitete für mich in .NET Core 2.0. Die akzeptierte Lösung hat bei mir nicht funktioniert. WICHTIGER Abschnitt hat den Trick für mich getan. Vielen Dank.
mpatel
18

Ich glaube, ich habe die genaue Lösung für das Problem gefunden - dotnet: Keine ausführbare Datei gefunden passenden Befehl "dotnet-ef" .

Ich verwende Dot Net Core 2.0 in VS 2017 Version 15.5.3

Ursache dieses Fehlers

Dieser Fehler wird dadurch verursacht , dass die Nuget ist nicht in der Lage zu finden , die Lösung Datei auf der Stelle.

Lösung: - Wechseln Sie in das Verzeichnis, in dem Sie die Klasse 'Startup.cs' haben

  1. Ich bin zum Stammverzeichnis gewechselt, indem ich den folgenden Befehl in Ihrer Package Manager-Konsole hinzugefügt habe .

    cd. \ School1

Hier war 'School1' mein Stammverzeichnis des Projekts und es enthält meine 'Startup.cs'-Klasse. In Ihrem Fall wird es anders sein.

  1. Führen Sie dann den Befehl dotnet efin der Package Manager-Konsole aus, die nun erfolgreich ausgeführt wird.

Beispiel mit Bildern zum besseren Verständnis

  1. Ich habe Fehler Fehler beim Ausführen dotnet ef. Geben Sie hier die Bildbeschreibung ein

  2. Ich habe den Fehler behoben, indem ich mit dem Befehl in den Stammordner verschoben habe cd .\School1

Ich hoffe, es hilft meinen Dot Net-Entwicklerkollegen.

Geben Sie hier die Bildbeschreibung ein

Yogihosting
quelle
1
Ja, dies hat mir geholfen, ähnliche Probleme zu beheben. Danke.
Mn
1
es hilft mir in gewissem Maße. Um das Problem zu lösen, folge ich auch der Antwort von @Michael Freidgeim
@Michael Freidgeim Saleh Enam Shohag
12

Ich musste Microsoft.EntityFrameworkCore.Tools hinzufügen.DotNet funktioniert. Der Abschnitt tools Ihrer Datei project.json sieht folgendermaßen aus:

"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
quelle
Es gibt nicht "Microsoft.EntityFrameworkCore.Tools.DotNet"
Elvin Mammadov
2
In der Benutzeroberfläche "Durchsuchen der NuGet-Pakete verwalten" wird der Suchbegriff .Tools.DotNet angezeigt. Die neueste Vorabversion ist 1.1.0-Preview4-Final.
K7Buoy
4

Wenn Sie auf dieses Problem gestoßen sind und den asp.net-Kern mit dem CLI-Tool ausführen, können Sie es lösen, indem Sie <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> in die Datei xx.csproj und hinzufügen dotnet restore . Dann können Sie den Befehl dotnet ef verwenden.

Dauphin
quelle
Ich bin tatsächlich auf dasselbe Problem gestoßen. Ich habe 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet verwendet und die Projektdatei aktualisiert, das Projekt neu geladen und dann erneut getestet und es hat funktioniert. Vielen Dank!
Meilen
1

Anstatt ein separates Konsolenfenster im VS Package Manager-Konsolentyp zu öffnen, führen Sie die folgenden Befehle aus:

Migration hinzufügen

Add-Migration <migration name>

Letzte Migration entfernen

Remove-Migration

Bevor eine Migration angewendet wurde (oder um die Migration anzuwenden):

Update-Database

Wenn die Migration angewendet wurde:

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

HTH

BEARBEITEN : Möglicherweise benötigen Sie in Ihrem MVC-Kernprojekt auch die folgende Klasse:

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

In meinem Fall dotnet efwar nicht verfügbar und wird nicht in der Liste angezeigt, wenn dotnet -hes ausgeführt wird.

Ich habe dotnet-ef global mit folgendem Befehl installiert und kann es jetzt verwenden. Aber immer noch nicht in der Liste.

dotnet tool install -g dotnet-ef 
HasanG
quelle
0

Ich habe ein separates Klassenbibliotheksprojekt verwendet. Nachdem Sie alle oben genannten Schritte in der Paketmanager-Konsole versucht haben und fehlgeschlagen sind. Ich habe die Eingabeaufforderung verwendet und es hat funktioniert! Seltsam. Dieser Artikel wird jedoch gutgeschrieben . Und wenn Sie separate Klassenbibliothek Projekt verwenden, Dies ist Ihre Lösung.

Mohsin
quelle
0

Unter Visual Studio 2017 musste ich diese Befehle über die Paketmanager-Konsole ausführen

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
quelle
0

Fügen Sie im Abschnitt Tools den folgenden Code hinzu:

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

Dieses Codeformat hat meinen Fehler behoben.

T-Jayanth Dore
quelle
0

Wenn Sie ein NuGet-Paket hinzufügen, wird es standardmäßig als PackageReference hinzugefügt. Dies ist falsch. Bearbeiten Sie es daher manuell

1- Bearbeiten Sie die .csproj-Datei

2- Wechsel von "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
quelle