[英]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>
读者注意:如果您还没有安装dotnet ef
,则需要先安装: dotnet tool install --global dotnet-ef
。 提问者已经这样做了。 在此答案的其余部分可以提供帮助之前,您需要先执行此操作。
对于Linux和macOS ,在 shell 的配置中添加一行:
bash
/ zsh
:
export PATH="$PATH:$HOME/.dotnet/tools/"
csh
/ tcsh
:
set path = ($path $HOME/.dotnet/tools/)
当您启动一个新的 shell/终端(或下次登录时) dotnet ef
应该可以工作。
对于Windows :
见这个问题上如何添加到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
不在您的路径中。
这是文档所说的:
全局工具可以安装在默认目录或特定位置。 默认目录为:
OS Path
Linux/macOS $HOME/.dotnet/tools
Windows %USERPROFILE%\\.dotnet\\tools
因此,您应该将$HOME/.dotnet/tools/
到您的$PATH
。
但还要注意文档中的这一部分:
这些位置在 SDK 首次运行时添加到用户路径中,因此可以直接调用安装在那里的 Global Tools。
所以,听起来好像出了什么问题。 如果您使用手动 tarball 进行安装,则 SDK 会出错,您应该将此错误报告给 Microsoft。 如果您使用分发包,他们就搞砸了,您应该将此作为错误报告给他们。
我已经尝试了所有以前的答案,但它在我的 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
如果上面的命令给你一个错误,请按照以下步骤操作。
检查路径 %USERPROFILE%.dotnet\\ 是否存在
如果没有,则运行以下命令
dotnet tool install -g dotnet-ef
现在再次检查路径并为以下路径设置环境变量
%USERPROFILE%\\.dotnet\\tool
现在在 cmd 中,设置数据库上下文文件所在的路径,然后运行以下命令
dotnet ef database update
注意:它适用于 .NET Core 3.0。
有时,当您安装新版本的dotnet
sdk 时,它会访问PATH
。
您必须手动将文件夹
.dotnet/tools
从您的主目录添加到PATH
。
关于路径修复:
请注意,这会将路径添加到用户路径,而不是系统路径环境变量。 从 Visual Studio 触发“开发人员命令提示符”或“开发人员 PowerShell”时,它不使用用户路径变量。 您还需要将其添加到系统环境变量中。
此外,您需要在更改生效之前重新启动 Visual Studio Code。
对于在 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
并将其作为一个单独的包进行了更新。
您需要将 %USERPROFILE%.dotnet\\tools 添加到 PATH。
如果它不存在,则运行以下命令:
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 解决了这个问题。 但在此之前,我们需要按照以下步骤检查安装是否正确。
运行以下命令。 如果看不到 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
到您的环境变量中,看看您是否在您的项目中得到它。
最后,您需要关闭您的项目并重新启动窗口。 就我而言,这一步解决了问题。
使用 EF Core 6.0,我们可以生成EF 捆绑包 - MSDN
这解决了上述问题,捆绑包可以作为常规可执行文件运行,并将应用迁移。 只要确保你有你的appsettings.json
或secrets.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.