从 .Net 标准项目中使用 .Net Core 库

Posted

技术标签:

【中文标题】从 .Net 标准项目中使用 .Net Core 库【英文标题】:Consume .Net Core library from .Net standard project 【发布时间】:2018-03-29 01:28:46 【问题描述】:

我有一个在 .Net 框架 4 中开发的标准 WPF 应用程序。现在,我的客户想要一个我计划使用 .Net Core 开发的网站。为了共享业务逻辑,我需要将数据库沿着业务层移动到一个单独的项目中,这里我打算使用.Net Core。因此,所有层,即 Data/Business/API 都将使用最新版本的 .Net Core 重写。

我能否从 WPF (.Net Framework 4) 项目中引用用 .Net Core 编写的业务层?

任何指针将不胜感激.....

【问题讨论】:

【参考方案1】:

您应该在 .NET 标准 库中实现通用功能。然后,您将能够从与您的公共项目所针对的 .NET Standard 版本兼容的所有应用程序中引用此程序集。

各种 .NET 实现针对 .NET Standard 的特定版本,MSDN 上的下表列出了 .NET Standard 的所有版本和支持的平台:https://docs.microsoft.com/en-us/dotnet/standard/net-standard。

.NET Core 的最新版本(撰写本文时为 2.0)实现了 .NET Standard 2.0。实现 .NET Standard 2.0 的 .NET Framework 的最旧版本是 4.6.1。这意味着您的 WPF 应用程序应该以 4.6.1 为目标才能使用 .NET Standard 2.0 程序集。

.NET Core 1.0 和 .NET Framework 4.5 支持 .NET Standard 1.0。

.NET Framework 4.0 不支持任何版本的 .NET Standard,因此您应该针对(至少).NET Framework 4.5 重新定位您的 WPF 应用程序。

【讨论】:

【参考方案2】:

我能否从 WPF (.Net Framework 4) 项目中引用用 .Net Core 编写的业务层?

答案是是的。您可以尝试一下:在 Visual Studio 中创建一个 WPF 应用程序项目和一个 .NET Standard 库项目,然后将应用程序项目中的引用添加到库项目中。

会有一些 NuGet 包您无法在 .NET Standard 项目中引用,因为它们仅支持完整的 .NET Framework,但大多数流行的 NuGet 包可以从 .NET Standard 项目中引用。您的问题也被标记为[entity-framework-6]。如果您想从 .NET Standard 项目中使用 Entity Framework,则必须使用 Entity Framework Core,因为 Entity Framework 6 需要完整的框架。

您可能应该创建一个快速峰值以确定您是否可以按照您的预期构建应用程序。

【讨论】:

这里需要注意的是,EF Core 与 EF 6 的功能相差甚远,因此 OP 在决定之前必须仔细分析使用的 API 和功能。或者,它始终可以在 .NET Framework 上运行 ASP.NET Core(暂时),直到 .NET Core 上提供特定的重要功能 我已将基于 WPF 的应用程序升级到 .Net 框架 4.6,并添加了使用 .Net Standard 1.3 版本开发的各个层的参考。现在,我面临另一个错误w.r.t。 Microsoft 的依赖注入库。错误详细信息如下 - 无法加载文件或程序集“Microsoft.Extensions.DependencyInjection.Abstractions,Version=1.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。任何建议问题出在哪里。 @AnilC:看看这个问题的答案:***.com/questions/46051831/… 您需要将绑定重定向添加到您的 WPF 项目。

以上是关于从 .Net 标准项目中使用 .Net Core 库的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 和 .NET 标准类库项目类型有啥区别?

从 .Net Core Stateless Service 调用 .Net 框架 Service Fabric Actor

WebApi NET Core 不接收请求 json,而它在 NET 标准中接收

为什么在一个解决方案中混合.Net Standard和.Net Core项目?

.NET 和 .NET Core 项目的单一类库项目

Asp.Net Core 轻松学-玩转配置文件