繁体   English   中英

找不到命令“dotnet ef”

[英]Cannot find command 'dotnet ef'

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

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

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

这是上面安装命令的结果

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

如何解决这个问题

对于LinuxmacOS ,在 shell 的配置中添加一行:

  • bash / zsh

     export PATH="$PATH:$HOME/.dotnet/tools/"
  • csh / tcsh :

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

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

对于Windows

这个问题上如何添加到PATH环境变量。

您需要将%USERPROFILE%\\.dotnet\\toolsPATH

这是怎么回事?

此故障的 .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不在您的路径中。

是文档所说的

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

OS Path

Linux/macOS $HOME/.dotnet/tools

Windows %USERPROFILE%\\.dotnet\\tools

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

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

这些位置在 SDK 首次运行时添加到用户路径中,因此可以直接调用安装在那里的 Global Tools。

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

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

dotnet tool install -g dotnet-ef

作为参考,请参阅此答案和此重大更改

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

例如,如果您使用 .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 ef database update

如果上面的命令给你一个错误,请按照以下步骤操作。

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

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

    dotnet tool install -g dotnet-ef
  3. 现在再次检查路径并为以下路径设置环境变量

    %USERPROFILE%\\.dotnet\\tool
  4. 现在在 cmd 中,设置数据库上下文文件所在的路径,然后运行以下命令

    dotnet ef database update

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

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

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

关于路径修复:

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

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

我在Mac OS上尝试运行,遇到问题,但是解决了,方法是将终端设置为cproj目录。 ->

dotnet tool install -g dotnet-ef

在此处输入图片说明

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

当您安装新版本的.NET时,该版本对我有用:

dotnet tool install --global dotnet-ef --version 3.0.1

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

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

  2. 如果它不存在,则运行以下命令:

     dotnet tool install -g dotnet-ef

我在使用 .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

TL&DR : dotnet tool install -g dotnet-ef

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

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

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

  1. 运行以下命令。 如果看不到 dotnet-ef,则继续执行第 2 步,否则转到第 3 步。

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

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

    我相信你已经这样做了。

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

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

使用 EF Core 6.0,我们可以生成EF 捆绑包 - MSDN

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

user@shell~$ ./efbundle

PS> efbundle.exe

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM