【问题标题】:How to install Entity Framework in a .Net Framework v4.6.1 application using Visual Studio 2017如何使用 Visual Studio 2017 在 .Net Framework v4.6.1 应用程序中安装实体框架
【发布时间】:2021-09-21 14:37:43
【问题描述】:

我在 C# 中的第一步很糟糕。

现在我正在尝试安装实体框架。为此,我只需转到 NuGet 包管理器,输入“Entity”并尝试安装第一个条目,即“Microsoft.EntityFrameworkCore”,版本 v5.0.10。

失败并显示以下错误消息:

无法安装包“Microsoft.EntityFrameworkCore 5.0.10”。您正在尝试将此包安装到以“.NETFramework,Version=v4.6.1”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。如需更多信息,请联系包作者。

这怎么可能? .NetFramework,v4.6.1 版本是我公司的默认版本,我刚刚在搜索结果中单击了第一个 NuGet 包,据我所知,Visual Studio 2017 是一个基本的 IDE。

最重要的是,没有方向可以去:错误消息只是说“不兼容”,但没有提到 .NetFramework 版本太旧或太新,.Net Framework 太旧或太新, ...

错误信息提到了“联系包作者”,但是当我访问实体框架(https://docs.microsoft.com/en-us/ef/core/)的“项目 URL”时,该网站甚至没有提到 .NetFramework。

有人知道解决这个问题的最简单方法吗? (我相信建议安装另一个版本的实体框架)

提前致谢

【问题讨论】:

  • EF Core 旨在用于 .NET Core 3.1 / .NET 5 或更高版本; .NET Framework 非常陈旧(好吧,2015 年 - 但这是科技行业!)并且基本上已经报废(net461 从明年 4 月开始正式死亡,但已经有效地 死了好几年);有什么方法可以挑战使用 .NET Framework 4.6.1 的决定吗?因为:这不适用于 EF Core。 EF for .NET Framework 的一个变体,但它是完全不同的东西(尽管相关)
  • 您正在寻找nuget.org/packages/EntityFramework(没有“核心”)。您可以在“依赖项”部分查看它是否适用于旧版 .Net 框架。正如@MarcGravell 建议的那样,我会检查您是否可以升级项目以使用.Net 5(即.Net 核心)。
  • @MarcGravell EF Core v3.x 在 .NET Framework 项目中运行良好。只有 v5+ 不支持。 :)
  • @RichardDeeming 很公平,很好的说明;但是,无论哪种情况:我可能会反对使用过时且未维护的库版本,除非它是唯一可用的选项;如果 OP 可以 使用 .NET 5(或类似的),那将是一个更好的结果 IMO
  • @MarcGravell 是的,在理想的世界中,我们都会迁移到最新最好的。 (虽然 IIRC,.NET 6 是下一个 LTS 版本。)但并不总是有预算或时间来迁移现有的代码库,特别是当迁移的好处对最终用户来说不是立即显而易见的时候。如果您需要从 ASP.NET 与 SSRS 交互,那么您将被 4.x 困住,因为它依赖于 WebForms。

标签: c# visual-studio entity-framework visual-studio-2017 .net-framework-version


【解决方案1】:

尽管@MarcGravell 的评论 EF Core 在 .NET Framework 项目中运行良好。但不幸的是,v5 仅适用于支持 .NET Standard 2.1 的框架,不包括任何版本的 .NET Framework。

.NET Standard | Microsoft Docs

对于 .NET Framework 项目,您可以使用的最新版本的 EF Core 是 v3.1.19。这支持 .NET Standard 2.0,技术上包括 .NET Framework 4.6.1 及更高版本。

Install-Package Microsoft.EntityFrameworkCore -Version 3.1.19

注意: 如 MS 文档中所述,使用 .NET Framework 4.6.1 应用程序中的 .NET Standard 2.0 库存在一些问题。特别是,您最终可能会引入大量支持包。如果您可以将应用程序升级到至少没有这些问题的 .NET Framework 4.7.2,那就更好了。

【讨论】:

    【解决方案2】:

    我已经确认,在 VS2017 Nuget 包管理器中,第一个条目是“Microsoft.EntityFrameworkCore”,并且在使用 .净 4.6 项目。 (NuGet 应该根据合适的目标依赖来建议)

    正如 Richard 指出的,您可以在 .Net Framework 项目中使用 EF Core,但限制是 EF Core 3.1,因为 .Net Framework 仅支持 .Net Standard 2.0。如果您在 VS 中使用包管理器 UI,您将需要使用“版本:”的下拉菜单来选择“3.1.19”,因为这是与 .Net Framework 4.x 一起使用的最后一个版本。

    我建议将 EF6 用于 .Net Framework 项目而不是 EF Core 3.1,因为 3.1 仍然缺少 EF6 中的功能。搜索“EntityFramework”将找到“EntityFramework”,即 EF6。 (奇怪的是,在搜索词“实体”下似乎不容易出现)

    请注意,如果您的目标是 .Net Framework 4.6.1,则该版本的支持结束日期为 2022 年 4 月。您应该强烈考虑将目标更新到 4.8,或至少为 4.6.2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2023-03-31
      相关资源
      最近更新 更多