【问题标题】:Run dotnet tool restore to make the dotnet-ef command available运行 dotnet tool restore 以使 dotnet-ef 命令可用
【发布时间】:2020-02-25 09:23:12
【问题描述】:

我在发布配置文件中的 Visual Studio 和 EF 迁移遇到了一个非常奇怪的情况。给定:

  • Visual Studio 2019 v16.4
  • .NET Core 项目。面向 .NET Core 3.1
  • EF 3.1
  • Azure 发布配置文件

我在本地项目中创建了迁移,当尝试在发布配置文件中枚举迁移时,我得到了

Run dotnet tool restore to make the dotnet-ef command available

我不知道这个错误是什么意思,因为似乎安装了 dotnet-ef 工具:

PM> dotnet --version
3.1.101
PM> dotnet ef --version
Entity Framework Core .NET Command-line Tools
3.1.1
PM> dotnet ef dbcontext list --json --project MyUIProject
Build started...
Build succeeded.
[
  {
     "fullName": "MyDataProject.MyDbContext",
     "safeName": "MyDbContext",
     "name": "MyDbContext",
     "assemblyQualifiedName": "MyDataProject.MyDbContext, MyDataProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
  }
]
PM> dotnet tool restore


Restore was successful.
PM>

最后一行没有改变任何东西。我可以使用Add-MigrationUpdate-Database等PS命令,也可以使用dotnet ef migrations adddotnet ef database update等cmd命令。 dotnet-ef <...> 也可以。他们唯一不起作用的地方——发布配置文件设置。我无法启用复选框以在发布时运行迁移。

Data 项目引用了这些 EF 相关的包:

<...>
<PackageReference Include="microsoft.aspnetcore.Identity.EntityFrameworkCore" Version="3.1.1" />
<PackageReference Include="microsoft.EntityFrameworkCore" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Data.SqlClient" Version="4.8.0" />
<...>

UI 项目仅引用 Design:

<...>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<...>

周围有很多类似的问题,比如:Cannot list Entity Framework Migrations in Visual Studio 2019 due to dotnet ef dbcontext --json failure

似乎他们的常见问题是他们没有安装工具,因为dotnet ef 命令不再是 .NET Core SDK 的一部分,而且我不是这种情况,因为本地 EF 工具已安装并从命令行工作.

【问题讨论】:

  • 虽然我没有使用 Windows 进行开发,但我可以推测它可能与用户权限有关(我在 Linux 中遇到过类似问题)。如果仅为特定用户配置文件安装这些工具,或者例如,执行发布的用户的 PATH 环境变量中缺少 dotnet ef 所在的目录,那么您可能会得到这个。
  • 在我安装 .NET 3.1 SDK 之前它一直有效。尝试删除并重新安装并不能解决问题。同样,我可以从 cmd、包管理器控制台运行这些命令并且它们可以工作。您可以在我的问题中看到这些命令的工作输出。唯一缺少它们的地方——发布设置对话框。
  • 我突然遇到与今天完全相同的问题。除了一点 HTML 之外,我的项目并没有真正改变任何东西,但我确实更新了 VS2019。但是,在使用旧版本 VS2019 将相同的存储库克隆到笔记本电脑时,我遇到了同样的问题。

标签: entity-framework asp.net-core .net-core entity-framework-migrations dotnet-tool


【解决方案1】:

我找到了两种方法

  1. 尝试以管理员身份运行 Visual Studio。

  2. 如果 (1.) 不起作用,请在项目中输入 dotnet new tool-manifestdotnet tool install dotnet-efdotnet tool restore

说明

不知何故,Visual Studio 无法访问安装了全局包的 C://Users/AlexanderK/.nuget。我们的电脑上可能有一些软件阻止 Visual Studio 访问全局安装的包。 我不确定 nuget 是如何工作的,但 npm for nodejs 可以在本地和全局安装的包中搜索。 因此,在我们的 Visual Studio 案例中,本地没有安装 dotnet-ef,但无法全局访问它。

在 (1.) 中,我们以管理员身份运行并尝试授予 Visual Studio 访问全局安装包的权限。

在 (2.) 中,我们在本地安装 dotnet-ef,因此 nuget 肯定会在本地找到该软件包。

更多关于 dotnet tool 命令 - Official Docs

我建议您使用 (1.),因为大多数 PC 不会有这个问题,并且当您在全球范围内安装 dotnet-ef 等软件包时,在本地安装它并不是一个好主意。

【讨论】:

  • 抱歉回复晚了。尝试以管理员身份运行 VS 并加载现有项目——同样的问题。
  • 尝试 (2.) 并报告
【解决方案2】:

检查您安装了哪些 .NET Core SDK 平台版本... 32 位或 64 位或两者兼有。

如果两者都有,我认为 VS2019 将使用它首先找到的任何东西,这可能不是你安装了 EF Core 工具的那个。

【讨论】:

  • 我已经安装了 .NET 3.1 x64 版本的 SDK。今天我安装了 .NET 3.1 SDK x86。没有变化。
  • 您是否从命令行同时运行并检查 EF 工具是否安装在两者中?
  • 我在 x64 和 x86 cmd 控制台中运行 dotnet ef。我在两者中都看到了一个独角兽标志,它们显示相同的版本:3.1.1。似乎在这两种架构中都安装了 EF 命令。
  • 这很确定......看起来这不是问题所在。当我遇到类似问题时为我工作。很抱歉,它没有帮助。我会一直在寻找安装/路径的东西......它真的闻起来像 VS 找错了地方。
【解决方案3】:

我遇到了同样的问题(在更新了 Visual Studio 2019 之后),在我的电脑上存在这个问题,但在另一台电脑上没有。这些文件都是平等的(通过 git 检查),VS2019 在某处缓存了一些东西,这很糟糕。

1 检查默认连接字符串是否正常。

2 检查是否安装了 dotnet ef。在核心 3.1 中你必须安装:dotnet tool install -g dotnet-ef

3 关闭VS,删除文件夹&lt;yourproject&gt;/Properties(如果需要可以备份),打开VS,清理解决方案并再次导入发布文件。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2021-07-02
    • 2021-12-04
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多