找不到命令“dotnet ef”

Posted

技术标签:

【中文标题】找不到命令“dotnet ef”【英文标题】:Cannot find command 'dotnet ef' 【发布时间】:2019-11-13 16:04:22 【问题描述】:

我在 Arch Linux / Visual Studio Code 上使用 .NET Core 2.0 并试图让 EF 工具工作,但我不断收到错误:

找不到命令 dotnet ef

我几乎四处寻找,但没有一个建议奏效。

运行'dotnet ef'的结果:

[wasiim@wasiim-PC WebApiServerApp]$ dotnet ef --help
Cannot find command 'dotnet ef', please run the following command to install

dotnet tool install --global dotnet-ef
[wasiim@wasiim-PC WebApiServerApp]$ dotnet tool list -g
Package Id            Version      Commands
---------------------------------------------------
dotnet-dev-certs      2.2.0        dotnet-dev-certs
dotnet-ef             2.2.3        dotnet-ef
[wasiim@wasiim-PC WebApiServerApp]$

这是 'dotnet --info' 结果,如果有帮助的话:

[wasiim@wasiim-PC WebApiServerApp]$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.105
 Commit:    7cecb35b92

Runtime Environment:
 OS Name:     arch
 OS Version:
 OS Platform: Linux
 RID:         arch-x64
 Base Path:   /opt/dotnet/sdk/2.2.105/

Host (useful for support):
  Version: 2.2.3
  Commit:  6b8ad509b6

.NET Core SDKs installed:
  2.2.105 [/opt/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.NETCore.App 2.2.3 [/opt/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

这是我的 .csproj 文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00005" />
    <PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00005" />
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.5" />
   <PackageReference Include="Lucene.Net" Version="4.8.0-beta00005" />
    <PackageGroup Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />

  </ItemGroup>

</Project>

【问题讨论】:

~/.dotnet/tools 在你的$PATH 中吗? @OmairMajid thaaanks 成功了!!!!!!你是真正的MVP人。如果您将其发布为答案,我会接受。 【参考方案1】:

使用 EF Core 6.0 我们可以生成EF Bundles - MSDN

这解决了上述问题,捆绑包可以作为常规可执行文件运行并应用迁移。如果使用 UserSecrets 包和生成的二进制文件,请确保您拥有 appsettings.jsonsecrets.json

user@shell~$ ./efbundle

PS> efbundle.exe

项目--project--startup-project 也可以像常规迁移一样指定

PS> dotnet ef migrations bundle --self-contained -r linux-x64 --project .\MyApp.Shared  --startup-project .\MyApp.ApiClient

我相信我们应该也可以在这里指定--connection your_connection_string,但我没有尝试。

【讨论】:

【参考方案2】:

我已经尝试了所有以前的答案,但它在我的最新 macOS v10.15 (Catalina) 更新的 Mac 上不起作用。

例如,如果您使用的是 .NET Core 3 版本,则需要运行以下命令:

export PATH="$PATH:$HOME/.dotnet/tools/"
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=false
export DOTNET_ADD_GLOBAL_TOOLS_TO_PATH=true

dotnet tool install --global dotnet-ef --version 3.0.0

【讨论】:

更新到最新版本:dotnet tool update --global dotnet-ef【参考方案3】:
dotnet ef database update

如果上述命令出错,请按照以下步骤操作。

    检查路径 %USERPROFILE%.dotnet\ 是否存在

    如果没有,则运行以下命令

    dotnet tool install -g dotnet-ef
    

    现在再次检查路径并为以下路径设置环境变量

    %USERPROFILE%\.dotnet\tool
    

    现在在 cmd 中,设置数据库上下文文件所在的路径,然后运行以下命令

    dotnet ef database update
    

注意:它适用于 .NET Core 3.0。

【讨论】:

路径现在好像是%USERPROFILE%\.dotnet\tools(最后是s【参考方案4】:

对于在 JetBrains Rider 上遇到此问题的任何人,我尝试了此页面上列出的所有解决方案,最终进入 Visual Studio 并在那里运行 dotnet tool install --global dotnet-ef --version 3.0.0 命令,然后在 Rider 中重新打开它 工作。

【讨论】:

这篇文章并不是回答问题的实际尝试。请注意*** doesn't work like a discussion forum,这是一个问答网站,每个帖子都是问题或问题的答案。帖子也可以有comments - 像这样的小句子 - 可用于批评或要求作者澄清。这应该是评论或new question 实际上,答案有助于通过告诉其他人这个问题确切使用哪个命令以及我如何解决我的问题 - 假设此页面上的其他答案不起作用 - 对我来说它没有.所以我认为您没有正确阅读。 Visual Studio 或 Visual Studio Code?他们是两个不同的东西。问题提到了Visual Studio Code。【参考方案5】:

关于路径修复:

请注意,这会将路径添加到用户 PATH,而不是 系统 PATH 环境变量。从 Visual Studio 触发“开发人员命令提示符”或“开发人员 PowerShell”时,它不使用 User 路径变量。您还需要将其添加到 System 环境变量中。

此外,您需要在更改生效之前重新启动 Visual Studio Code。

【讨论】:

【参考方案6】:

这是由于在 .NET Core 3 中通过从 .NET Core 中删除 dotnet ef 并使其成为一个单独的包进行了更新。

    您需要将 %USERPROFILE%.dotnet\tools 添加到 PATH。

    如果不存在,则运行这个命令:

    dotnet tool install -g dotnet-ef
    

【讨论】:

您在路径中漏掉了一个“\”,它应该是 %USERPROFILE%\.dotnet\tools【参考方案7】:

对我来说,关闭解决方案并重新启动 Windows 解决了这个问题。但在此之前,我们需要按照以下步骤检查安装是否正确。

    运行以下命令。如果您没有看到 dotnet-ef,则继续执行第 2 步,否则,请转到第 3 步。

    dotnet tool list --global
    

    转到路径%USERPROFILE%\.dotnet\tools 并检查是否dotnet-ef 是否存在。如果没有,那么您可能需要运行

    dotnet tool install --global dotnet-ef --version 3.1.4
    

    我相信你已经这样做了。

    将此路径 %USERPROFILE%\.dotnet\tools 添加到您的环境变量中,以查看您是否在项目中获得它。

    最后,您需要关闭项目并重新启动窗口。就我而言,这一步解决了问题。

【讨论】:

【参考方案8】:

TL&DRdotnet tool install -g dotnet-ef

基本原理:请参阅 ASP.NET Core 3 Preview 4 的公告,其中说明此工具不再是内置的,需要显式安装。

参考:https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-0-preview-4/

【讨论】:

【参考方案9】:

我在使用 .net Core 5.0.0-rc.1 的 Ubuntu 20.04.1 上遇到了同样的问题,对我有用的解决方案是将 dotnet ef 安装为本地工具

https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools#install-a-local-tool

dotnet new tool-manifest
dotnet tool install  dotnet-ef --version 5.0.0-rc.1.20451.13

【讨论】:

【参考方案10】:

读者注意:如果你还没有安装dotnet ef,需要先安装:dotnet tool install --global dotnet-ef。提问者已经这样做了。在此答案的其余部分可以提供帮助之前,您需要先执行此操作。

如何解决这个问题

对于 Linuxma​​cOS,在您的 shell 配置中添加一行:

bash/zsh:

export PATH="$PATH:$HOME/.dotnet/tools/"

csh/tcsh:

set path = ($path $HOME/.dotnet/tools/)

当您启动一个新的 shell/终端(或下次登录时)dotnet ef 应该可以工作。

对于Windows

请参阅this question,了解如何添加到PATH 环境变量。

您需要将%USERPROFILE%\.dotnet\tools 添加到PATH

发生了什么事?

.NET Core 3.0(预览版)版本的这个失败更有启发性:

$ dotnet ef
Could not execute because the specified command or file was not found.
Possible reasons for this include:
  * You misspelled a built-in dotnet command.
  * You intended to execute a .NET Core program, but dotnet-ef does not exist.
  * You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.

第二个和第三个都引用dotnet 试图找到dotnet-ef 命令但找不到。正如第三点所说,dotnet-ef 不在你的路径中。

这里是what the docs say:

全局工具可以安装在默认目录或特定位置。默认目录是:

OS Path

Linux/macOS $HOME/.dotnet/tools

Windows %USERPROFILE%\.dotnet\tools

因此,您应该将$HOME/.dotnet/tools/ 添加到您的$PATH

但还要注意文档中的这一部分:

这些位置是在SDK第一次运行时添加到用户路径中的,所以安装在那里的全局工具可以直接调用。

所以,听起来好像出了点问题。如果您使用手动 tarball 安装,SDK 会出错,您应该将此错误报告给 Microsoft。如果您使用分发包,他们搞砸了,您应该将此作为错误报告给他们。

【讨论】:

这些推荐的修复都没有解决我的问题。在我的情况下,报告的不存在的 .NET Core 程序看起来像废话:dotnet-@C:\Users\myUser\AppData\Local\Temp\tmp75c598ec34944633925ed32feffbe40f.rsp 添加了一个快速的 TLDR 运行以相处。 这不是正确的答案。正确答案是在命令提示符中运行“dotnet tool install -g dotnet-ef”。只有在之后您才应该参考上面的答案来正确设置 PATH 变量。 @JohanWintgens 我明白你在说什么,但我认为这是问题的答案。该问题已经包含一个运行dotnet tool install... 的步骤。如果问题不包括这一点,那么您将是完全正确的。 该死的,这确实是问题所在。在我的辩护中,我实际上必须按 Ctrl + F 才能在那堵文字墙中找到它。答案很好!【参考方案11】:

对于那些在更新 Visual Studio 或 .NET Core 包后遇到问题的人,这是由于在 .NET Core 3 中通过从 .NET Core 中删除 dotnet ef 并将其设为 separate package 可以通过以下方式安装:

dotnet tool install -g dotnet-ef

参考见this answer和这个breaking change

【讨论】:

【参考方案12】:

在我的情况下,%USERPROFILE%\.dotnet\ 中不存在工具文件夹,因此我必须运行命令dotnet tool install --global dotnet-ef 来安装 dotnet ef。然后我就可以运行 dotnet ef...

这是上面安装命令的结果:

【讨论】:

这应该是答案 当你安装一个新版本的 .NET 这个对我有用:dotnet tool install --global dotnet-ef --version 3.0.1 其次,我不明白这怎么没有被标记为解决方案...... 是的,它会更容易找到。很高兴它帮助了人们。 P.S.控制台必须以管理员身份运行【参考方案13】:

有时当您安装新版本的dotnet sdk 时,它会命中PATH

您必须手动将文件夹.dotnet/tools从您的主目录添加到PATH

【讨论】:

以上是关于找不到命令“dotnet ef”的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu20.04找不到start命令

ubuntu20netplan命令找不到

sudo xx 找不到命令

python命令找不到 pip 命令找不到解决方案

python命令找不到 pip 命令找不到解决方案

找不到 git 命令,也找不到 ssh-agent