asp.net - 是否可以从 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?
解决方案
.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 即可获取数据、报告,无论您需要什么。这有点像一种轻量级的微服务方法。
推荐阅读
- android - 从分配给变量的获取中获取返回的值
- android - Android - UsageStats getTotalTimeInForeground 不更新当前前台应用程序
- apache-kafka - 事务性 Kafka 生产者
- python - Appium pycharm 无法从代码启动 AppiumService()
- css - 如何跟踪有多少用户看到了网络字体?
- oop - 使用 redis 进行面向对象编程
- size - Terdata 列大小错误超过 64k 字节限制
- javascript - 将 css 上传到具有不同 id 的页面
- python - 如何通过更新变量来更改张量的输出?
- android - 如何使用firebase同时为不同用户使用单个活动