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

时间:2016-05-17 12:57:12

标签: entity-framework asp.net-core asp.net-core-1.0

我正在使用带有Microsoft.EntityFramework.Core和SQLite的ASP.Net Core RC2来完成项目示例。

我已经按照本教程进行了操作: 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%" ]
  }
}

12 个答案:

答案 0 :(得分:60)

实体框架核心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文件的同一目录运行时才可用。

实体框架核心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下的“升级到1.1”标题。

答案 1 :(得分:56)

实体框架核心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

答案 2 :(得分:38)

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

通过命令行或nuget包管理器为db provider安装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 

答案 3 :(得分:31)

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

要解决此问题,您需要:

  • 使用NuGet获取 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Tools.DotNet 程序包库。
  • project.json(适用于.NET Core 1.0)或<projectName>.csproj(适用于.NET Core 1.1+&amp; 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命令,否则它将赢得&#39;工作。

有关该问题的其他信息和详尽说明,请参阅my blog post

答案 4 :(得分:16)

我认为我找到了问题的准确解决方案 - dotnet:找不到匹配命令的可执行文件&#34; dotnet-ef&#34; ..

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

  

此错误的原因

导致此错误的原因是 Nuget 无法在该位置找到 解决方案文件

  

解决方案: - 转到您拥有&#39; Startup.cs&#39;的目录。类

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

    cd。\ School1

  2. 这里&#39; School1&#39;是我项目的根目录,它包含我的&#39; Startup.cs&#39;在你的案例中,它会有所不同。

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

      图片清晰理解示例

      1. 运行dotnet ef时出现错误错误。 enter image description here

      2. 我通过使用cd .\School1

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

        希望它可以帮助我的Dot Net Developers。

        enter image description here

答案 5 :(得分:12)

我必须添加Microsoft.EntityFrameworkCore.Tools。 DotNet 才能工作。 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"
},

答案 6 :(得分:4)

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

答案 7 :(得分:1)

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

  

添加迁移

     

Add-Migration <migration name>

     

删除上次迁移

     

Remove-Migration

     

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

     

Update-Database

     

应用迁移时:

     

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

HTH

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

答案 8 :(得分:1)

在我的情况下,dotnet ef不可用,并且在运行dotnet -h时未显示在列表中。

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

dotnet tool install -g dotnet-ef 

答案 9 :(得分:0)

我正在使用一个单独的类库项目。在包管理器控制台中尝试并失败以上所有内容之后。我用命令提示符,它工作了!奇怪的。 但是,信用额转到this article。 如果您使用单独的类库项目,This是您的解决方案。

答案 10 :(得分: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"
    }
  }

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

答案 11 :(得分: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>