Modernize Studio
语言:简体中文
发邮件给我们

旧版 .NET 应用(WinForms 和 Web Forms)的现代化改造

2000 年代和 2010 年代为 .NET Framework 编写的应用,状况通常比 VB6 或 Access 工具好,值得比全部重写更审慎的方案。我们先确定哪些可以原样迁移、哪些必须重建,再把应用迁到 ASP.NET Core,数据和规则保持不变。

为什么是现在

.NET Framework 4.6.2 的支持将于2027年1月12日结束,4.6.1 及更早版本已不再受支持。.NET Framework 4.8 和 4.8.1 跟随所安装 Windows 版本的生命周期,因此运行在 4.8 上的应用并没有迫在眉睫的风险。不过这个框架只会收到修补,新的库、工具和托管选项都是为当前 .NET 打造的。

ASP.NET Web Forms 只能运行在 .NET Framework 上,没有移植到 ASP.NET Core。Windows Forms 虽然能在当前 .NET 上运行,但仍是 Windows 桌面技术,员工无法通过浏览器使用。

  1. Windows 10微软停止支持
  2. .NET Framework 4.6.2微软停止支持

改造内容

基于 .NET Framework 的桌面和网页应用,以及与之相关的服务。

  • Windows Forms 应用

    使用 DataGridView 表格、类型化 DataSet 和 TableAdapter 的桌面程序,常通过 ClickOnce 或 MSI 安装。它们会变成网页应用;如果更合适,也可以作为桌面程序迁到当前的 .NET。

  • ASP.NET Web Forms 网站

    使用 ViewState、回发、UpdatePanel、GridView 和 SqlDataSource 的页面,以及母版页和用户控件。我们根据应用情况,用 Razor Pages、MVC 或 Blazor 在 ASP.NET Core 中重建。

  • 数据访问

    ADO.NET 代码、类型化 DataSet、LINQ to SQL、Entity Framework 6 模型和存储过程。如果数据库结构合理,我们会保留它,只修改与之交互的代码。

  • 服务和集成

    WCF 和 ASMX Web 服务、.NET Remoting 以及 Windows 服务。它们会变成当前 .NET 上的 REST API 和后台服务。

  • 登录和配置

    Forms 身份验证、ASP.NET Membership 提供程序、Windows 身份验证,以及 web.config 和 app.config 中的设置。用户和角色迁到 ASP.NET Core Identity;如果您已在使用 Microsoft Entra ID 或 Active Directory,也可迁到那里。

  • 报表

    Visual Studio 版 Crystal Reports、ReportViewer 中的 RDLC 报表和 Excel 导出。它们会变成由服务器生成的 PDF 或 Excel 文档。

网页版的样子

示例说明,数据为虚构

租金台账在 WinForms 程序中可能的样子,以及同一台账的网页版本。

拖动滑块,或使用键盘方向键。

各部分迁移后的去向

在 .NET Framework 中:WinForms 界面或 .aspx 页面
在网页应用中:Razor Pages 或 Blazor 组件
在 .NET Framework 中:代码隐藏和事件处理程序
在网页应用中:有测试覆盖的服务和控制器
在 .NET Framework 中:类型化 DataSet、LINQ to SQL
在网页应用中:Entity Framework Core 或 Dapper,连接同一个数据库
在 .NET Framework 中:WCF 或 ASMX 服务
在网页应用中:基于 ASP.NET Core 的 REST API
在 .NET Framework 中:Membership 和 Forms 身份验证
在网页应用中:ASP.NET Core Identity 或 Entra ID
在 .NET Framework 中:每台电脑上的 ClickOnce 或 MSI
在网页应用中:一个网址,在浏览器中打开

迁移流程

  1. 48 小时内完成评估

    请发给我们解决方案及源代码、数据库备份或脚本,以及去掉生产环境密码的配置文件。我们会在 48 小时内回复一份书面报告:程序目前的功能、风险所在、网页版的结构设想、试点模块的固定价格以及其余部分的估价。评估免费,不附带任何义务。

  2. 试点模块

    我们先在您真实数据的副本上构建应用的一部分,通常是使用最多的部分。在决定其余部分之前,员工可以在日常工作中实际使用。

  3. 同样的数据,同样的结果

    我们向新旧两个应用发送相同的请求和数据,比对结果,从计算字段到 API 响应和生成的文档。我们发现的每条业务规则还会写成自动化测试,此后每次发布新版本前都会重新运行。您会收到列明每项核对结果的报告。

  4. 30 天并行运行

    完整应用就绪后,旧应用会与之并行使用 30 天。任何差异都会在旧程序仍在时暴露出来,我们在约定价格内修正。

常见陷阱及应对方法

  1. ViewState 和回发逻辑

    Web Forms 页面把状态保存在 ViewState 和 Session 中,逻辑分散在 Page_Load、控件事件和 IsPostBack 判断里。ASP.NET Core 没有对应机制。我们把页面生命周期改写为明确的请求,让每个操作都有一个清晰的入口。

  2. 已不存在的 API

    应用程序域、.NET Remoting 和代码访问安全在当前 .NET 中都不可用,有些 API 能编译通过,运行时却抛出 PlatformNotSupportedException。我们会在评估阶段、确定价格之前扫描代码找出这些问题。

  3. Membership 密码

    旧版 ASP.NET Membership 提供程序创建的账号,密码哈希格式与 ASP.NET Core Identity 不同。我们会迁移账号,让用户用现有密码登录,并在首次登录时升级哈希;如果旧设置不允许这样做,则安排重置密码。

  4. 第三方控件和报表运行库

    Telerik、DevExpress、Infragistics 等厂商的 Web Forms 和 WinForms 控件套件,以及 Crystal Reports 运行库,都绑定在特定的框架版本上。我们核对版本和许可证,逐个控件决定用什么替代。

  5. 存储过程和触发器中的规则

    这一时期的许多应用,真正的业务规则写在数据库里。如果数据库保留,这些过程也保留,用同一批数据进行的核对会覆盖它们。如果更换数据库,我们会有计划地逐个迁移。

  6. 保存在内存中的状态

    把数据放在 Session、静态变量或进程内缓存中的应用,默认只有一台从不重启的服务器。我们把这些状态显式化,使新应用可以在多个实例上运行,重启后也不会丢失。

价格和付款

评估

免费

书面报告,48 小时内

试点模块

€1,000–1,500

通常;开工时付 50%,验收时付 50%

付款条件

启动时支付 50%,验收时支付 50%。尾款须在上线和交付源代码之前付清。较大的项目按约定阶段分期付款。

评估免费。如果决定不继续,报告归您所有,无需支付任何费用。

价格固定,并在开工前以书面形式确定。如果工作内容发生变化,我们会发送新的书面报价,经您确认后才进行额外工作。

对于完整迁移,我们的目标是比一般软件公司的报价低 40% 到 60%。我们能做到,是因为我们是一家小型工作室,没有写字楼租金,也没有销售团队。

价格不含增值税。

估算价格

一次真实的迁移,由测试验证

Northwind 是微软随 Access 附带的示例数据库,并不是我们的客户。我们把一份公开副本迁移到 SQLite 和 PostgreSQL,通过自动化测试将每张表、每个查询与原始数据逐一比较,并在此基础上构建了一个可运行的网页应用。案例研究给出了具体数字,等效性报告列出了每一项核对。

Northwind 是一个 Access 数据库,但对于 .NET WinForms 和 WebForms,我们采用同样的方法:迁移,用同样的数据将结果与原始程序比较,并让新旧程序并行运行。

等效性报告(英文) · 可点击预览和示例评估(演示)

常见问题

必须全部重写吗?

不必。包含业务逻辑的类库往往只需少量修改就能迁到当前的 .NET,数据库通常也可以保留。变化最大的是用户界面,也就是 Web Forms 页面和 WinForms 界面。评估报告会区分哪些可以迁移、哪些必须重建。

我们的 WinForms 应用能继续作为桌面程序吗?

可以。当前的 .NET 支持 Windows Forms,迁移过去能延长程序寿命,费用也低于改写为网页应用。如果用户需要通过浏览器或在办公室以外使用,网页应用才是答案。两种方案都合理时,评估报告会分别报价。

我们的应用运行在 .NET Framework 4.8 上,迁移紧迫吗?

就支持而言并不紧迫,因为 4.8 和 4.8.1 跟随所安装 Windows 版本的生命周期。迁移的理由通常在别处:需要浏览器访问、想部署在 Linux 上、所用的库已不再支持 .NET Framework,或者很难再找到熟悉 Web Forms 的开发人员。

可以分阶段迁移吗?

可以。ASP.NET Core 和旧应用可以在同一地址下并行运行,每次迁移一个模块。微软自己的指南也为 ASP.NET 应用介绍了这种渐进式做法。

你们使用自动升级工具吗?

在有帮助的地方会用,例如更新项目文件和包引用。但工具不会决定一个 Web Forms 页面在 ASP.NET Core 中应该如何运作,而且每个转换后的部分都和其他部分一样,要用同一批数据与旧应用核对。

我们会用哪种数据库?

通常就是您现有的数据库,一般是 SQL Server。更换数据库是另一项决定,只有在理由明确时我们才会建议。

联系我们

请选择您方便的联系方式。我们会在一个工作日内用中文通过电子邮件回复您。

通过邮件

riccardo@modernizestudio.com
写邮件

请把源代码和含测试数据的数据库副本发给我们,或者发一段应用说明。我们会在一个工作日内回复。

把文件发给我们

如果程序是用 Access、Excel、VB6、Delphi 或早期 .NET 开发的,您在发送文件后 48 小时内即可收到一份免费的书面评估。

  1. 复制一份文件,如您愿意,可使用测试数据。
  2. 把它附在表单或邮件中,最好放进有密码保护的压缩包,并另行发送密码。如有需要,我们会先签署保密协议。
  3. 48 小时内:收到评估报告和试点模块的固定价格。

我们在意大利办公。

给我们留言

可选。数据库、Excel 工作簿、截图或需求说明,最大 10 MB。更大的文件请在留言中附上下载链接。

发邮件给我们

点击按钮会打开您的邮件程序并填好内容。只有在邮件程序中点击“发送”后才会真正发出。

发邮件给我们