3

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

  • 视觉工作室 2019 v16.4
  • .NET 核心项目。面向 .NET Core 3.1
  • 英孚 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>

最后一行没有改变任何东西。我可以使用 PS 命令(例如Add-Migration, Update-Database)或 cmd 命令(例如dotnet ef migrations add, )dotnet ef database updatedotnet-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 工具已安装并从命令行工作。

4

3 回答 3

2

我找到了两种方法

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

  2. 如果 (1.) 不起作用,请在项目中输入dotnet new tool-manifest, dotnet tool install dotnet-ef, dotnet 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 之类的软件包时,在本地安装它并不是一个好主意。

于 2020-04-29T20:27:23.220 回答
0

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

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

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

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

于 2020-05-22T09:01:08.307 回答
0

Check which .NET Core SDK platform versions you have installed... 32-bit or 64-bit or both.

If you have both, I think VS2019 will use whatever it finds first, which may not be the one you have EF Core tools installed in.

于 2020-03-06T23:30:02.337 回答