首页 > 解决方案 > 是否可以从 ASP.NET Core MVC 项目中引用 .net framework 4.7.2 类库?

问题描述

我有一个运行良好的 ASP.NET MVC 5 项目,它还引用了一个生成一些 CrystalReports 的 .NET Framework 4.7.2 类库。CrystalReports 不支持 .NET Core,因此类库将保留完整的 .NET Framework。

现在,如果我将 ASP.NET MVC 5 升级到 ASP.NET Core 2(或 3),我是否能够引用类库并可能生成那些 CrystalReports?

标签: asp.net.netasp.net-core.net-coreasp.net-core-mvc

解决方案


.NET Core 不支持包含 .NET Framework 库。时期。但是,.NET Core 支持 .NET Standard,而且由于 .NET Framework 也实现了 .NET Standard,Microsoft 在编译器中做了一个特殊的例外,以允许您包含 .NET Framework 库,但需要注意的是它们可能根本不起作用,或者完全。当您在 .NET Core 项目中包含 .NET Framework 库时,您会收到有关此效果的警告,并且您需要确保该库在端到端正常工作。

只要不使用特定于 .NET Framework 的 API(尤其是特定于 Windows 的 API),大多数 .NET Framework 库都可以工作。如果他们这样做,那么他们将无法工作。

在这里,这个库似乎确实使用了 Windows 特定的 API,这意味着它与 .NET Core 不兼容。在这种情况下,您仍然可以创建 ASP.NET Core 项目,但您必须面向 .NET Framework,而不是 .NET Core。也就是说,直到 ASP.NET Core 3.0,它不能以 .NET Framework 为目标。ASP.NET Core 3.0+ 依赖于 .NET Standard 2.1,没有任何版本的 .NET Framework 支持或永远不会支持。

因此,如果您需要使用不 100% 符合 .NET Standard 2.0 的 .NET Framework 库,则必须以 .NET Framework 为目标,如果您必须以 .NET Framework 为目标,则您将被锁定在 2.2 的 ASP .NET 核心。

更新

这个答案现在有点老了,但以防万一它仍然有帮助,我个人处理这种事情的方式是创建一个非常小而简单的 API。基本上,您创建一个面向 .NET Framework 的 ASP.NET Core 2.1 (LTS) 应用程序,而该应用程序所做的只是与 .NET Framework 库进行交互。这意味着创建报告。然后,您可以自由地将您的实际应用程序创建为面向 .NET Core 的 ASP.NET Core 3.1+ 应用程序,并且您只需调用 API 即可获取数据、报告,无论您需要什么。这有点像一种轻量级的微服务方法。


推荐阅读