将 .NET Framework 转换为 .NET Core:您应该知道的步骤和要点

自从 2016 年 6 月 27 日微软首次推出 .NET Core 时,它​​立即在软件开发人员中流行起来。如今,55% 的开发人员更喜欢它而不是 .NET Framework,因为它可以更轻松地构建可以跨平台部署的软件多种环境。

但是,与任何技术变革一样,将现有应用程序从 .NET Framework 迁移到 .NET Core 可能会非常艰巨。虽然这可能是有益的原因有很多,但在冒险之前,您应该彻底了解迁移所涉及的内容。

在这篇文章中,我们将讨论如何将 .NET Framework 转换为 .NET Core,以及在此过程中应注意的事项。

为什么从.NET Framework迁移.NET Core 相关

19 多年来,.NET Framework 一直是 Windows 桌面、Web 和服务器应用程序的默认环​​境。这是一个很棒的环境,但并不完美。.NET Framework 的最大问题是它与 Windows 相关联。如果您只想在 Windows 机器上运行您的应用程序,那很好,但如果您想在 Linux 或 macOS 上运行您的应用程序,它固有地限制了选项。

不可否认,使用 .NET Framework 有很多优点,但也有不少限制。

例如:

  • .NET 中对对象关系 (OR) 的支持有限,因为它仅附带实体框架。
  • 由于供应商锁定,Microsoft 控制着 .NET Framework 的未来发展。
  • 与 C、C++ 相比,.NET Framework 性能低下,不适合高端应用。
  • 尽管 .NET Core 是 .NET Framework 的继任者,但向 .NET Core 的过渡是复杂的。

最后一点尤其重要,因为 .NET Core 被认为是 .NET 开发的未来。事实上,根据微软官方的公告,新的应用程序应该从 2019 年开始构建在 .NET Core 上。截至 2022 年初,最新的 .NET 版本是 11 月 10 日发布的 .NET 5 和 .NET 6,分别为 2020 年和 2021 年 11 月 8 日。

Microsoft 的 .NET 支持和版本控制

在什么情况下 .NET Framework 到 .NET Core 的迁移是有意义

您是否应该从 .NET Framework 迁移到 .NET Core?在迁移到 .NET Core 时,不是是否应该迁移,而是何时迁移。当然,仍然有许多应用程序可以在 .NET Framework 上顺利运行,并且在某些情况下已经运行多年。那你为什么要搞砸呢?

将当前应用程序基础架构迁移到 .NET Core 的原因有很多。不过,最重要的原因是:

当您寻求性能改进时

由于其模块化结构,.NET Core 可以更轻松地访问特定功能,而无需使用整个框架。这允许开发人员仅实现他们需要的那些功能,从而提高性能。因此,如果您正在尝试提高性能,那么将代码迁移到 .NET Core 应该是您的战略步骤之一。

当您想从跨平台开发中受益时

将应用程序迁移到 .NET Core 的另一个重要原因是它现在可以在 Linux 或 macOS 上运行。这为您在哪里运行应用程序开辟了全新的可能性。您可以在 Linux 服务器甚至 Raspberry Pi 上运行它!

当您想获得开源代码库时

.NET Core 开源的最大好处在于,任何人都可以为其开发做出贡献,从而实现无缝的错误修复和快速、持续的功能升级部署。这意味着,如果您发现框架的任何部分存在问题,您可以轻松地在内部修复它,或者聘请专业人士来完成工作。

当您努力实现更简单的包管理时

NuGet 对 .NET 开发人员来说是一件很棒的事情,但它有时会很复杂。包可以依赖于其他包,如果这些包具有相同库的不同版本。换句话说,它们可能无法一起工作。Core 有一个新的包管理器,使这更容易。

虽然没有迫切需要转换到 .NET Core,但看起来这是未来的首选框架。因此,如果您正在考虑搬家,但您没有合格的内部团队,请务必寻找一家提供桌面迁移服务、旧版软件更新和云服务的公司。这是保证无缝传输的唯一方法。

比较表:.NET Framework 与 .NET Core

从上表中可以看出,.NET Framework 是一种成熟、稳定且可靠的技术,企业可以将其用于各种应用程序。但是,在某些情况下,使用 .NET Framework 可能是更好的选择。如果您的应用程序完全依赖 .NET Core 不支持的库和包、您的业务需求已经得到满足并且您的资源有限,则尤其如此。

如何从 .NET Framework迁移到 .NET Core – 5 个关键步骤

从 .NET Framework 迁移到 .NET Core 是一项重要的决定,可以在许多方面对应用程序的性能和维护产生积极影响。在本节中,您将了解采取行动的关键步骤。

首先,重要的是要指出迁移项目有两种方法——自动和手动

自动迁移

使用 .NET 升级助手进行迁移

要自动从 .NET Framework 更改为 .NET Core,您可以使用 .NET Upgrade Assistant。此工具分析现有的 .NET Framework 应用程序并提供将其项目迁移到目标 .NET Core 的建议。

升级助手还在转换应用程序时跟踪兼容性问题。升级助手生成的报告可用作将应用程序从 .NET Framework 迁移到 .NET Core 的起点。

手动迁移

以下是手动将项目从 .NET Framework 移动到 .NET Core 的一些常用步骤。

如何将您的项目从 .NET Framework 移动到 .NET Core

1. 分析项目依赖

在开始迁移过程之前,您需要分析系统背景、代码和依赖项。Microsoft 提供了 .NET Portability Analyzer,这是一种分析应用程序依赖项和项目引用的工具。此工具还可以帮助您识别 .NET Сore 中不可用的 API。

工具可用作 Visual Studio 扩展和 NuGet 包。

如果您发现与 .NET Core 不兼容的 NuGet 依赖项,可以采取一些方法来继续迁移:

  • 联系开发人员并寻求他们的支持。请记住,.NET Core 是开源的,开发人员是志愿者,这就是为什么您应该注意他们的时间和精力;
  • 访问 nuget.org 并搜索与您现在使用的功能相似的包;
  • 如果可能,尝试编写一个代码来完成与包本身相同的任务;
  • 新版本和新功能不断发布;因此,您可以简单地等到发布之日,然后再使用某些应用程序功能。联系 .NET 团队,让他们知道您想使用哪个库。

2. 从 ASP.NET MVC 迁移

由于此迁移是最简单的步骤,因此许多公司选择从它开始。好消息是,由于全面的 Microsoft 指导,该过程相对快速和简单。

步骤如下:

  • 第一步是使用最适合您项目的类型创建一个新的 ASP.NET 项目:ASP.NET Core Web API、ASP.NET Core Web App,如果您从头开始,甚至可以使用 ASP.NET Core Empty。确保您的目标框架是“.NET 5”。
  • 确保您的 Global.asax.cs 代码是最新的。.NET 5 需要将任何自定义逻辑迁移到启动类。
  • 将所有现有的控制器和类转移到新的项目结构中。
  • 更新您的 API 控制器类。它们应该派生自 Microsoft.AspNetCore.Mvc.ControllerBase。最好创建自己的 ApiControllerBase 类,该类派生自 ControllerBase 并使用 [ApiController] 属性进行修饰。Microsoft.AspNetCore.Mvc.Controller 提供对 MVC 视图的支持,因此此类控制器通常派生自此类。
  • 修复所有 Nuget 和引用错误。.NET 5 中的命名空间已更改,因此您可能需要调整 using 语句。
  • 如果您使用处理程序,请将它们转换为 .NET 中间件。
  • 将 web.config 设置移动到 appsettings.json。
  • 摆脱旧项目和任何不必要的文件,例如 Global.asax、app.config 和 packages.config。

3.从 WebForms 迁移

.NET Core 的一个主要缺点是不支持 WebForms。这就是为什么不将其称为迁移,而是将 WebForms 称为从 .NET Framework 移植到 .NET Core。

这个过程相当复杂。您可以选择从头开始重写您的应用程序,而不是尝试移植遗留代码。这可以导致更可靠和更安全的应用程序。然而,这一举措需要大量的时间和精力。

或者,您可以逐步将系统逐页迁移到 .NET Core。

您可以升级系统的一小部分,对其进行测试,看看是否一切正常,然后开始升级另一部分。如果您不想或不能同时停止应用程序上的所有工作,这将为您提供更大的灵活性。不过,您需要同时运行两个核心库。

4. 移动你的项目文件

您可以使用 ‘dotnet migrate; 将旧项目迁移到核心项目;命令,它会迁移 project.json 和 Web 应用程序所需的任何其他文件。

dotnet migrate 命令不会以任何方式更改您的代码。它只会更新您的项目文件以使用新的 SDK 样式的项目格式(即 csproj)。

5. 在 .NET Core 上测试运行您的应用程序

迁移应用程序后,它应该可以在任何受支持的操作系统上运行。迁移应用程序的最后一步应该是测试在 .NET Core 上运行当前应用程序。在 .NET 上运行您的应用程序,如果它有效,恭喜!你准备好了。

综上所述,这里需要指出的是,有些应用程序无法通过自动化工具进行迁移,因为它们又大又笨重,尤其是企业系统。

.NET Core支持技术

.NET Core 不支持很多技术,因此在迁移过程中您可能会遇到问题。密切关注主要组件和工具:

  • 应用领域

应用程序域用于在同一进程中运行的不同应用程序之间提供隔离。由于进程在 .NET Core 中的不同应用程序之间提供了隔离;不支持应用程序域。建议使用新的 AssemblyLoadContext 类来动态加载程序集。

  • 远程处理

.NET Remoting 是一种使应用程序能够相互通信的 .NET 技术。它基本上允许远程组件跨应用程序域进行通信。

尽管远程处理是一项强大的技术并且可以在许多用例中使用,但它不能作为 .NET Core 的一部分使用,因为我们已经知道,AppDomain 不是 .NET Core 的一部分。作为远程处理的替代方案,您可以使用 Web 服务或使用其他进程间通信技术,例如 gRPC。

  • 代码访问安全 (CAS)

代码访问安全 (CAS) 是基于 .NET Framework 的应用程序的一项安全功能。它基于具有一组与之关联的权限的代码组。在 .NET Core 中,默认情况下不支持 CAS。但是,您仍然可以使用以下选项为程序集指定权限。

  1. 使用基于角色的安全性来保护您的应用程序。
  2. 使用基于资源的安全性对您的应用程序进行更细粒度的控制。
  3. 您还可以使用为您的应用程序执行集中授权的外部授权服务。
  • LINQ2SQL

LINQ to SQL 是 .NET Framework 的一个组件,它提供了用于将关系数据作为对象进行管理的运行时基础结构。

LINQ to SQL 完全支持事务、视图和存储过程。因为 LINQ2SQL 是一个 .NET Framework 组件,所以 .NET Core 根本不支持它。您将不得不使用 Entity Framework Core 来获得类似的功能。

从 .NET Framework 迁移应用程序时 .NET Core 不支持的技术

如何为.NET Framework 到 .NET Core 迁移准备系统

您可能已经知道,.NET Core 是一个流行的开源、跨平台和高性能框架,用于开发 Web 应用程序。但是,.NET Framework 到 .NET Core 的迁移并不像看起来那么容易。不过,如果您遵循这 3 步过程,您可以毫不费力地采取行动。

如何为 .NET Framework 到 .NET Core 迁移准备旧系统

1.实现模型绑定器

将桌面应用程序迁移到 .NET Core 时,处理表单数据的方式可能需要更改。模型绑定器是一个功能强大的组件,可以自动将来自 HTTP 请求的数据映射到操作方法参数。

2.利用 API 和客户端开发

您应该使用更多的 API 来构建应用程序并更加面向客户端。此外,如果您想让您的应用程序更易于访问,请在 Angular 或 React 上构建它们 – 较新的框架,它们对 WebForms 的依赖程度较低且更易于移植。

3.创建 .NET 标准库

将现有代码库迁移到 .NET Core 的另一个关键过程是创建 .NET 标准库。这将使您知道是否可以在 .NET Framework 应用程序和 .NET Core 应用程序中使用相同的代码。它还允许您开始迁移代码,而无需重新部署整个应用程序。

最后的想法

不管你怎么看,.NET 的未来都是 Core。它提供了比 .NET Framework 更好的性能。它也是一个跨平台框架,可以更轻松地在多个操作系统上开发、测试和部署应用程序。