需要更新 EF Core 工具

264

当我在 VS 2017 包管理器控制台中使用 dotnet ef 工具时,会出现一个关于需要更新 EF Core 工具的警告信息:

PM> dotnet ef migrations list -s ../RideMonitorSite

The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.2-rtm-30932'. Update the tools for the latest features and bug fixes.
20180831043252_Initial

但是我的csproj文件中有这个条目:

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.1.2" />
  </ItemGroup>

我确认安装的版本实际上已经过时:

PM> dotnet ef --version
Entity Framework Core .NET Command-line Tools
2.1.1-rtm-30846

那么我该怎么更新工具呢?顺便说一下,我在其他答案中看到过,过时的 global.json 文件可能会导致这个问题。但是我在解决方案中找不到任何 global.json 文件。


我认为你可以删除对DotNetCliToolReference的引用,https://github.com/aspnet/EntityFramework.Docs/issues/708 - Antonio Campagnaro
谢谢您的建议,@AntonioCampagnaro。但是,即使我删除了这些引用,仍然会收到警告消息。 - Mark Olbert
1
通过包管理器控制台升级它,就像这个答案一样。 - Sebastian Ferrari
15个回答

582

使用命令行,CmdPowerShell 来安装 特定版本

dotnet tool update --global dotnet-ef --version 3.1.0

或者安装 最新版本 使用以下命令:(也适用于重新安装):

dotnet tool update --global dotnet-ef


3
我使用的是3.0.0版本,第一条命令可以正常运行,但第二条命令无法执行。当我在没有指定任何版本的情况下运行该命令时,出现了以下错误: 由于以下原因,工具“dotnet-ef”更新失败: 无法还原工具包... - Pippo46
149
为什么他们不能把这个信息放在错误提示里面? - Simon_Weaver
3
也许我们应该有一天提交一个 PR... @Simon_Weaver - Riscie
21
好的,我已经创建了一个 PR:https://github.com/dotnet/efcore/pull/20792。 - Riscie
4
在我的情况下,更新到最新版本并没有起作用。但是从错误消息中,我可以得到需要从3.1.6更新到5.0.2的信息,所以我使用了你建议的具体更新命令dotnet tool update --global dotnet-ef --version 5.0.2,并且成功了。谢谢!;-) - Matt
显示剩余2条评论

25

对于 .NET 6,它将是

dotnet tool update --global dotnet-ef --version 6.0.0

对于我的最新版本,使用以下命令进行更新:dotnet tool update --global dotnet-ef --version 6.0.1 - soan saini
2
为什么你在命令中加入了版本号?只需要运行:dotnet tool update --global dotnet-ef,就可以完成更新了。 - HamsterWithPitchfork

21
我已经将此问题反馈给Github上的开发团队。事实证明,这是当前工具或Nuget包中的已知问题,当您创建一个基于EF Core的AspNet Core网站时会加载这些内容。它的修复计划在未来版本中实现。
目前的解决方法是简单地忽略警告。
另外提供了另一种解决方法,涉及调整csproj文件以显式定义AspNet Core元包的版本 - 我写这篇文章时它已经升级到2.1.3 - 但我无法使该方法起作用;我仍然收到警告消息。

18

对我有效的解决方案是在包管理器控制台中运行以下命令:

PM> Install-Package Microsoft.EntityFrameworkCore -Version 2.1.11
PM> Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.11

请确认版本号与我的情况下错误信息中的版本号匹配,我遇到了以下错误:

The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.11-servicing-32099'. Update the tools for the latest features and bug fixes.

请访问以下网站以查看可用版本: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/


16

尝试执行以下命令: Install-Package Microsoft.EntityFrameworkCore.Tools

如果问题仍然存在,则也执行以下命令: Update-Package Microsoft.EntityFrameworkCore.Tools


3
这是个不错的建议,但对于我来说没有解决问题。 - Banoona
为我安装了一个缺失的软件包,解决了一个生成问题,但警告仍然存在。无论如何,是个好建议。 - dyslexicanaboko

6
我的解决方案是安装来自微软的工具dotnet-ef https://www.nuget.org/packages/dotnet-ef。它使用相同的命令,但没有警告。改变之处在于使用dotnet-ef而不是dotnet ef。
如果已经安装了dotnet-ef,则使用以下命令进行更新 dotnet tool update --global dotnet-ef --version n.n.n (n.n.n为您要升级到的版本)

4

为解决此问题,您可以采取以下技术之一:


  • 技术1: 使用包管理器控制台(特别适用于Microsoft Visual Studio用户)
    PM> Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.2

  • 技术2:使用.NET CLI
    > dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.1.2

  • 技术3:使用程序包引用

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.2">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
  • 技巧4:使用Packet CLI
    > paket add Microsoft.EntityFrameworkCore.Tools --version 2.1.2

注意:要使用此版本,您需要NuGet 3.6或更高版本。
参考链接:https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/2.1.2


2
安装新的.NET Core SDK v2.1.401版本,然后再次检查“dotnet ef --version”。我遇到了同样的问题,在我的情况下,这个方法有效。此外,您无需添加Microsoft.EntityFrameworkCore.Tools.DotNet。

谢谢,@surbaniak。我已经做过了。事实证明,这是当前NuGet包的一个已知问题,并且正在计划修复。解决方法是忽略这个问题,因为(据说;我自己没有检查过)没有功能损失。 - Mark Olbert
这个回答也帮到了我。我安装了.NET Core SDK v2.1.403(几乎相同的版本),警告就不再出现了。你需要确保.NET Core SDK和运行时都已更新,以避免出现此类警告,版本也是最新的。Microsoft网站上的URL也发生了变化,但我使用的是:https://www.microsoft.com/net/download/dotnet-core/2.1。 - Tore Aurstad
我安装了.NET Core SKD v2.1.701(dotnet-sdk-2.1.701-win-x64.exe),但仍然出现错误。 - Patee Gutee

1

像马丁一样,使用命令行、Cmd或PowerShell来安装特定版本:

dotnet tool update --global dotnet-ef --version 3.1.0

或者安装最新版本(也适用于重新安装):

dotnet tool update --global dotnet-ef

但是,我在我的电脑上遇到了问题: “当运行没有指定任何版本的命令时,我遇到了以下错误:工具'dotnet-ef'由于以下原因无法更新:无法还原工具包。” Liko Pippo46

所以,我采取了以下步骤:

dotnet tool uninstall --global dotnet-ef 但是遇到了同样的问题,所以我去了扩展目录: C:\Users\Evan.dotnet\tools.store\dotnet-ef

我发现旧版本(2.x),我的第二个问题是找不到fileproject.assets.json文件。

所以我将fileproject.assets.json文件从2.x版本复制到父存储库中。

所有事情都做得很完美:

  1. dotnet tool uninstall --global dotnet-ef

    卸载版本2.x

  2. dotnet tool install --global dotnet-ef

    安装版本3.1


1
  • 忽略这个问题
  • 不要更新你的< PackageReference Include = " Microsoft . EntityFrameworkCore . Tools " Version ="" / >
  • 在我的情况下,我选择了“Update-Database -Context MyElementContext”,现在一切正常。

我在Dino Esposito的书“Programming ASP.NET Core”中找到了这个。

'注意:此版本的CLI工具与应用程序使用的.NET Core运行时版本不同。运行时版本在项目文件中指定,并且您可以从所选IDE的用户界面轻松编辑它。如果您想手动编辑项目文件,则只需编辑.csproj XML文件并更改TargetFramework元素的值即可。该值指的是标识版本的单体名称(例如netcoreapp2.0)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接