未找到匹配命令的可执行文件 "dotnet-ef"

No executable found matching command "dotnet-ef"

我正在通过使用 ASP.Net Core RC2 与 Microsoft.EntityFramework.Core 和 SQLite 来做一个项目示例。

我已按照本教程进行操作: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

但是,当我 运行 这个命令时:

dotnet ef migrations add FirstMigration

我收到这个错误:

No executable found matching command "dotnet-ef"

这是我的 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%" ]
  }
}

Entity Framework核心1.0

您只需要更新 project.json 文件的 tools 部分以包含以下内容:

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

这应该使 dotnet ef 命令可用。

重要

我在这里还应该注意,dotnet ef 命令只有在 运行 它们来自包含 project.json 文件的同一目录时才可用。

Entity Framework核心1.1
如果您在升级到 Entity Framework Core 1.1 后再次遇到此问题,请务必将 Microsoft.EntityFrameworkCore.Tools 依赖项替换为 Microsoft.EntityFrameworkCore.Tools.DotNet 版本 1.1.0-preview4。也没有必要保留 imports 部分。有关这方面的更多信息,请参阅 Entity Framework Core 1.1 release announcement blog post.

下的 "Upgrading to 1.1" 标题

我必须添加 Microsoft.EntityFrameworkCore.Tools.DotNet 才能工作。 project.json 文件的工具部分将如下所示:

"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核心1.1

如果您将 VS2017 与没有 project.json 文件的新 .csproj 项目一起使用,请添加此内容

您需要编辑 .csproj 文件(在解决方案资源管理器中右键单击它并单击编辑 whatever.csproj),然后将其粘贴到

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

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

提供

在 visual studio 2017 年,我需要 运行 来自包管理器控制台的这些命令

install-package Microsoft.EntityFrameworkCore.SqlServer.Design

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

这是从 .NET Core 1.0 切换到 .NET Core 1.1+ 或 2.x 时的常见问题。

要解决这个问题,您需要:

  • 使用 NuGet 获取 Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Tools.DotNet 包库。
  • 在您的 project.json(对于 .NET Core 1.0)或 <projectName>.csproj(对于 .NET Core 1.1+ 和 2.x)项目配置文件中手动添加对此包的引用。

更具体地说,对于 .NET Core 1.0 项目,添加:

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

对于 .NET Core 1.1+ 和 .NET Core 2.x 项目,添加:

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

如果您已有 tools json 键或 <ItemGroup> 元素以及一个或多个现有 DotNetCliToolReference 元素,只需将新元素添加到现有组.

重要提示:除执行上述步骤外,您还必须在项目根文件夹(包含项目文件的文件夹)中启动 dotnet ef 命令,否则它不会工作。

有关更多信息和问题的详细解释,您可以阅读 my blog post

我正在使用一个单独的 class 库项目。在包管理器控制台中尝试并失败以上所有操作后。我使用了命令提示符,它起作用了!诡异的。 但是,归功于 this article。 如果您使用单独的 class 库项目,This 是您的解决方案。

如果您遇到此问题并且 运行 asp.net 核心使用 CLI 工具,您可以通过添加来解决它 <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 进入 xx.csproj 文件,然后 dotnet restore 。 然后你可以使用 dotnet ef 命令。

而不是在 VS 包管理器控制台中打开单独的控制台 window 并 运行 以下命令:

Add migration

Add-Migration <migration name>

Remove last migration

Remove-Migration

Before a migration has been applied (or, to apply migration):

Update-Database

When migration has been applied:

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

HTH

编辑:您的 MVC 核心项目中可能还需要以下 class:

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);
    }
}

特定于 VS2017 15.3 或更高版本和 ASP.NET CORE 2.0 或更高版本...

通过命令行或 nuget 包管理器为数据库提供程序安装 nuget。

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

将以下部分添加到 .csproj

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

在 VS2017 中通过命令行或 nuget 管理器安装设计时工具。

dotnet add package Microsoft.EntityFrameworkCore.Design

这会在项目目录的命令行中启用 dotnet ef *。

在项目目录的命令行中启用 dotnet ef * 命令,

dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold 

在工具部分添加以下代码,

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

这种格式的代码解决了我的错误。

我想我已经找到问题的准确解决方案 - dotnet:找不到可执行文件匹配的命令"dotnet-ef"。 .

我在 VS 2017 versio 15.5.3 中使用 dot net core 2.0

Cause of this error

此错误是因为 Nuget 无法找到 解决方案文件在位置上。

Solution:- Move to the directory where you have the 'Startup.cs' class

  1. 我通过在 程序包管理器控制台上添加以下 命令 移动到 root .

    cd .\School1

这里'School1'是我的项目的根目录,里面有我的'Startup.cs'class,你的会不一样案例.

  1. 然后 运行 程序包管理器控制台 上的命令 dotnet ef 现在将 运行 成功。

Example With Pictures for Clear Understanding

  1. 我在 运行ning dotnet ef 时遇到错误错误。

  2. 我通过使用命令 cd .\School1

  3. 移动到根文件夹来更正错误

希望它能帮助我的 Dot Net 开发人员。

添加NuGet Pkg时默认会添加为PackageReference,这是错误的,请手动编辑

1- 编辑 .csproj 文件

2- 从 "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>

就我而言,当 dotnet -h 为 运行 时,dotnet ef 不可用且未显示在列表中。

我已经使用以下命令全局安装了 dotnet-ef,现在我可以使用它了。但仍然不在列表中。

dotnet tool install -g dotnet-ef