混合使用 .NET Framework 和 .NET CORE 有什么问题?

What are the problems with mixing .NET Framework and .NET CORE?

我有大量针对 .NET Framework 4 编写的中间和后端组件(存储库、服务等),但它们仍然与我现在正在进行的新项目相关。这个新项目的前端将用ASP.NET CORE2.2编写。 我应该怎么办 - 在 .NET CORE 中重新创建所有组件,或者在前端针对 CORE 运行时保持后端 运行 针对 .NET Framework?例如,有哪些考虑因素?性能?

就组件而言,我想您是在谈论 class 库。您应该意识到 class 库的目标框架基本上只是指定了特定的 API 兼容性。最终打包的实际框架代码以实际应用的目标框架为准。

换句话说,您可以将对以 .NET Framework 为目标的 class 库项目的引用添加到以 .NET Core 为目标的应用程序,然后将该应用程序发布到只有 .NET Core 的计算机安装后,它将 运行(没有 .NET Framework)。理论上,至少。

.NET Core 在技术上不支持 .NET Framework 引用。它支持 .NET Standard 引用。然而,.NET Standard 2.0 的 API 足迹足够大,.NET Framework NuGet 包和互联网上流传的其他库的后台目录也足够大,微软调整了编译器以允许直接引用 . NET 框架库。大多数以 .NET Framework 为目标的代码实际上可以以 .NET Standard 为目标,无需更改,并且 Microsoft 确定在大多数情况下掷骰子是足够安全的,而不是等待每个库维护者更改其库的目标框架.NET Standard(其中许多库甚至不再维护)。

但是,有一个很大的警告。当你这样做时,你会得到一个编译器警告,基本上告诉你这里没有保证。它将允许您添加引用并 try 来使用它,但是如果使用了任何 APIs 但 .NET Core 不支持,它将崩溃并且烧伤。然后由您彻底测试您的应用程序,确保没有任何问题,然后您可以根据需要取消警告。

总而言之,您可以在.NET Core 2.0+ 中直接引用.NET Framework 库。它们可能最终无法正常工作,但只要它们不使用任何不受支持的 API(通常是 Windows 特定的东西,例如绘图、音频、GUI/paint 等) ,那你就没事了。

但是,如果您维护这些库,最好的办法是将它们重新定位到 .NET Standard 2.0。如果你能让他们在上面编译,那么你会 知道 不会有任何问题,而不仅仅是猜测或希望,它不会对任何人产生任何影响现有的 .NET Framework 应用程序也使用它们。