在 .NET Framework 应用程序中使用 .NET Core Class 库

Consume .NET Core Class Library in .NET Framework app

我的 .NET Core class 库为我的数据库提供了一个模型,我的 WPF 应用程序需要引用此 class 库才能访问数据库。是否可以从 WPF 应用程序添加对 class 库的引用并使用该模型?

我使用Entity Framework Core访问数据库,我的模型是由EF Core生成的工具.

您有一个 class 库用于 .NET Core 3.1 使用 Microsoft.EntityFrameworkCore 和一个 .NET Framework 4.7.2 应用程序应该引用这个库。有不同的选择,它们的努力和限制各不相同。

迁移到 .NET Core

自 .NET Core 3.0 起,Windows 应用程序支持 WPF。这意味着您可以将您的应用程序迁移到 .NET Core 3.1 并直接使用您的库项目。那里有很多教程,see MSDN 供参考。迁移的潜在问题包括以下几个方面。

  • 您不能或不想删除 .NET Framework
  • .NET Core WPF 实现和运行时间行为的差异
  • .NET Framework 项目或包的引用/依赖关系
  • C++\CLI 互操作依赖项

通常对于小项目迁移应该是简单直接的,所以你可以试一试。如果它不适合您或您 运行 遇到问题,.NET Standard 方法可能对您更方便。

迁移到 .NET Standard

另一种方法是将 .NET Core 库迁移到 .NET Standard。要在两个框架之间共享库,您最多可以针对 .NET Standard 2.0,因为 .NET Framework not support anything beyond that。幸运的是,Microsoft.EntityFrameworkCore 库符合这个要求。但是,也有潜在的障碍。

  • 您不能更改库项目本身或者它是一个外部库
  • 您依赖于不以 .NET Standard <= 2.0 为目标的包
  • 您依赖无法替换的 .NET Core 特定代码

如果您可以迁移 .NET Standard 并希望同时支持 .NET Framework 和 .NET Core,这是使您的库可重用且易于维护的方法。事实上,如果您的依赖项和您的代码符合 .NET Standard 2.0 迁移几乎不费吹灰之力。

多目标

为了完整起见,还可以选择多目标您的库或应用程序项目。在这个过程中对应的项目有两个版本,每个框架一个。但是,在您的情况下,没有必要这样做,您将不会从付出的努力中受益。