【问题标题】:No executable found matching command "dotnet-ef"找不到与命令“dotnet-ef”匹配的可执行文件
【发布时间】:2016-09-13 14:21:46
【问题描述】:

我正在使用带有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%" ]
  }
}

【问题讨论】:

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


【解决方案1】:

Entity Framework Core 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 Core 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”标题。

【讨论】:

  • 不在project.json 的文件夹中是我的问题,谢谢!
  • 它对我不起作用。我不断收到同样的错误。
  • @NikolaSchou:在工具部分,尝试不使用结构,即仅添加版本。例如:`“工具”:{“Microsoft.EntityFrameworkCore.Tools”:“1.0.0-preview2-final”,“Microsoft.AspNetCore.Server.IISIntegration.Tools”:“1.0.0-preview2-final”},`
  • @NikolaSchou 您还必须重新打开 cmd。
  • @Adrian,也谢谢你。很长一段时间后,我回到了.net core。当我问这个问题时,我遇到了老问题。好搞笑
【解决方案2】:

我必须添加 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"
},

【讨论】:

  • 没有“Microsoft.EntityFrameworkCore.Tools.DotNet”
  • 有 ... 在 Browse through Manage NuGet Packages GUI 中搜索词 .Tools.DotNet 将显示它。最新的预发布版本是 1.1.0-preview4-final。
【解决方案3】:

Entity Framework Core 1.1

如果您在没有 project.json 文件的情况下将 VS2017 与新的 .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

【讨论】:

  • 它可以工作,但需要知道正确的版本。因为我是新手,所以我也很难找出正确的版本。因此,任何关注答案的人都知道您的 Microsoft.EntityFrameworkCore.Tools.DotNet 版本并放入版本标签。即 2.0.3
  • 这真的节省了我的时间。谢谢!我更新了VS2017,它自动将dotnet core CLI 更新为与dotnet core 1.0 不兼容的2.0 版本。但似乎是时候将我的项目 .net core 1.0 更新为 2.0
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    • 使用 NuGet 获取 Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Tools.DotNet 包库。
    • 在您的 project.json(适用于 .NET Core 1.0)或 &lt;projectName&gt;.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 键或一个 &lt;ItemGroup&gt; 元素以及一个或多个现有 DotNetCliToolReference 元素,只需将新元素添加到现有组中即可。

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

    有关更多信息和对该问题的详细说明,您可以在 my blog post 上阅读更多信息。

    【讨论】:

    • 谢谢你拯救了一天:)
    • 如何在项目根文件夹中启动 dotnet ef 命令?
    • @IanWarburton 通过在 PATH 环境变量中添加C:\Program Files\dotnet 或使用完整路径,即C:\Program Files\dotnet\dotnet.exe
    • 在 .NET Core 2.0 中为我工作。接受的解决方案对我不起作用。重要部分对我有用。谢谢。
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 我实际上遇到了同样的问题。我使用的是 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet,并更新了 proj 文件,重新加载了项目,然后重新测试并成功了。谢谢!
      【解决方案8】:

      不要在 VS 包管理器控制台中打开单独的控制台窗口,而是键入并运行以下命令:

      添加迁移

      Add-Migration &lt;migration name&gt;

      删除上次迁移

      Remove-Migration

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

      Update-Database

      应用迁移时:

      Update-Database -Migration &lt;previous migration&gt; -Context &lt;db context name&gt;

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

        • 很好的答案,我正在查看所有内容,关于添加到“ItemGroup”的部分是真正阻碍我使用 EF Core 2 的 .NET Core 2 Web API。
        • 这里也一样。带有 Tools.DotNet 的 DotNetCliToolReference 是我的关键
        • 这解决了我的问题,使用 EF Core 2 的 NET Core 2 Web API 也存在同样的问题
        【解决方案10】:

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

         "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】:

          我想我已经找到了问题的准确解决方案 - dotnet : No executable found matching command "dotnet-ef"..

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

          此错误的原因

          此错误是由于 Nuget 在该位置无法找到 解决方案文件

          解决方案:- 移动到您拥有“Startup.cs”类的目录

          1. 通过在您的包管理器控制台上添加以下命令,我已移至 root

            cd .\School1

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

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

          图片示例

          1. 运行dotnet ef 时出现错误错误。

          2. 我通过使用命令cd .\School1移动到根文件夹来纠正错误

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

          【讨论】:

          • 是的,这帮助我解决了我所面临的类似问题。谢谢。
          • 它在一定程度上帮助了我。为了解决我的问题,我也遵循@Michael Freidgeim 的回答
          【解决方案12】:

          默认情况下,添加 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>
          

          【讨论】:

            【解决方案13】:

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

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

            dotnet tool install -g dotnet-ef 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-08-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-05-05
              • 1970-01-01
              相关资源
              最近更新 更多