找不到与命令“ dotnet-ef”匹配的可执行文件


82

我正在通过将ASP.Net Core RC2与Microsoft.EntityFramework.CoreSQLite一起使用来做项目示例。

我遵循了本教程: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%" ]
  }
}

该公告显示了您使用工具时在RC2中的project.json外观:github.com/aspnet/Announcements/issues/172
Pawel,

Answers:


60

实体框架核心1.0

您只需要更新toolsproject.json文件的这一部分以包括以下内容:

"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 Core 1.1
如果升级到Entity Framework Core 1.1后再次遇到此问题,请确保将Microsoft.EntityFrameworkCore.Tools依赖项替换为Microsoft.EntityFrameworkCore.Tools.DotNetversion 1.1.0-preview4。也不需要保留该imports部分。有关此的更多信息,请参见Entity Framework Core 1.1发行公告博客文章下的“升级到1.1”标题。


非常感谢您:D
Redplane '16

22
不在文件夹中project.json是我的问题,谢谢!
kitsu.eb

6
它对我不起作用。我不断收到相同的错误。
尼古拉·舒

1
@NikolaSchou您还必须重新打开cmd。
泰勒

1
@Adrian,也谢谢你。很长一段时间后,我回到.net core。当我问这个问题时,我面临着一个古老的问题。太逗了
Redplane

56

实体框架核心1.1

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

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

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

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


它可以工作,但是需要知道正确的版本。由于我是新手,因此我也很难找出正确的版本。因此,遵循答案的任何人都知道您的Microsoft.EntityFrameworkCore.Tools.DotNet版本,并放入了版本标记。即<Version> 2.0.3 </ Version>
萨利赫·埃南·肖哈格

这确实节省了我的时间。谢谢!我更新了VS2017,它会自动更新dotnet core CLI2.0与不兼容的版本dotnet core 1.0。但是似乎是时候该将我的项目更新.net core 1.0为了2.0
Boooooooooms

40

特定于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 

2
很好的答案,我正在查看所有内容,有关添加到“ ItemGroup”的部分实际上是使用EF Core 2在.NET Core 2 Web API上对我真正造成阻碍的部分
。– djangojazz

同样在这里。DotNetCliToolReference 在我的案例中,with Tools.DotNet是关键
blfuentes

这解决了我的问题,使用EF Core 2的NET Core 2 Web API的相同问题
Deluq,

32

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

要解决此问题,您需要:

  • 获取Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Tools.DotNet使用NuGet程序包库。
  • 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>

如果您已经拥有一个toolsjson键或一个<ItemGroup>包含一个或多个现有DotNetCliToolReference元素的元素,只需将新元素添加到现有组中即可。

重要说明:除了执行上述步骤之外,您还必须dotnet ef在项目根文件夹(包含项目文件的文件夹)中启动命令,否则它将不起作用。

有关此问题的更多信息和广泛解释,请阅读我的博客文章


谢谢您,您节省了一天:)
marvelTracker

如何在项目根文件夹中启动dotnet ef命令?
伊恩·沃伯顿

1
通过C:\Program Files\dotnet在PATH环境变量中使用C:\Program Files\dotnet\dotnet.exe
@IanWarburton

在.NET Core 2.0中为我工作。公认的解决方案对我不起作用。重要部分对我有用。谢谢。
mpatel

18

我想我已经找到了准确的解决了这个问题- DOTNET:没有可执行找不到匹配的命令“的dotnet-EF” ..

我在VS 2017 Versio 15.5.3中使用点网核心2.0

错误原因

导致此错误,因为的NuGet无法找到解决方案文件上的位置。

解决方案:-移至具有“ Startup.cs”类的目录

  1. 我通过在Package Manager Console上添加以下命令来移至根目录

    cd。\学校1

这里的“ School1”是我项目的根目录,它包含我的“ Startup.cs”类,在您的情况下会有所不同。

  1. 然后dotnet efPackage Manager Console上运行命令,该命令现在将成功运行。

带有图片的示例,便于您清楚理解

  1. 我收到错误运行时出错dotnet ef在此处输入图片说明

  2. 我通过使用以下命令移至根文件夹来更正错误 cd .\School1

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

在此处输入图片说明


1
是的,这帮助我解决了我面临的类似问题。谢谢。
mns

1
它在某种程度上对我有帮助。对于我要解决问题的案例,我还遵循@Michael Freidgeim的回答
Saleh Enam Shohag,

12

我必须添加Microsoft.EntityFrameworkCore.Tools。点网工作。您的project.json文件的tools部分如下所示:

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

没有“ Microsoft.EntityFrameworkCore.Tools.DotNet”
Elvin Mammadov

2
通过管理NuGet软件包浏览GUI中有...,搜索词.Tools.DotNet将显示它。最新的预发行版是1.1.0-preview4-final。
K7Buoy

4

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


我实际上遇到了同样的问题。我使用的是2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet,并更新了proj文件,重新加载了项目,然后重新进行了测试,然后它正常工作。谢谢!
英里

1

而不是在VS Package Manager控制台中打开单独的控制台窗口,而是运行以下命令:

添加迁移

Add-Migration <migration name>

删除上一次迁移

Remove-Migration

在应用迁移(或应用迁移)之前:

Update-Database

应用迁移后:

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

高温超导

编辑:您可能还需要在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

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

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

dotnet tool install -g dotnet-ef 

0

我正在使用一个单独的类库项目。在软件包管理器控制台中尝试以上所有步骤并使其失败之后。我使用了命令提示符,它起作用了!奇怪的。但是,本文值得一提。如果您使用单独的类库项目,就是您的解决方案。


0

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

0

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

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

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


0

默认情况下,添加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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.