MWGA - 为了复活1000亿行C#代码

2026-01-29 15:51:21  来源:互联网

1.一句话介绍

MWGAMake WinForms Great Again的缩写,它是一个工具软件,能快速地将使用了GDI+WinForm.NET程序快速迁移到Blazor WASM平台上,将程序代码修改量控制在10%以下,从而复活全球1000亿行C#代码。

2.项目背景

据估计,全球范围内企业级生产环境中运行着1000万至1500万个WinForms应用程序。在这些应用中,60%80%有现代化改造需求,其中40%60%优先选择Web化迁移,涉及的C#代码可能有数千亿行。由于可复用C#代码且具备基于浏览器的跨平台能力,Blazor WebAssembly成为热门选择。

但是有大量的WinForms使用了System.Drawing模块调用GDI+进行复杂的自定义绘图和交互,这些部分难以迁移,通常需要重写或大幅修改。为此,市场上对低改动、可复用业务逻辑和绘图代码的现代化迁移解决方案需求强烈。但长期以来一直缺乏有效工具和方法,导致许多企业面临高昂的重写成本和风险,存在巨大供需矛盾。

3.我们的目标

MWGA就是专门帮助将WinForms应用程序迁移到Blazor WASM平台上,即使这些程序使用GDI+功能,我们也预期将对这些程序源码的修改量不超过10%。这极大的降低WinForms软件现代化的成本和风险。

我们的长期目标是复活全球1000亿行经过市场验证的C#代码,使其在现代Web前端平台上继续发挥价值。MWGA帮助开发者将一套C#代码同时编译成.exe.wasm文件,两者运行效果保持高度一致。

从另外一个角度看,MWGA可以看成一个通用前端框架,但是采用了特有的WinForms编程模型,是WinForms技术栈在前端领域中的一个海外殖民地,这是一个重大的跨界融合,使得全球数百万个WinForms开发者无需更换技术栈即可在纯前端领域发挥作用。而且C#的强类型语言特性和GDI+严谨的编程模型也有助于减少AI编程产生的隐形BUG

软件下载地址:https://github.com/dcsoft-yyf/MWGA

4.使用案例一:时间轴产品,1%代码修改量

时间轴产品是南京都昌公司的一个WinForms软件产品,现已开源,这是一个面向医院的专业软件产品,可以认为是体温单软件的增强版,它包含了7万行C#代码,其中有数万行GDI+绘图相关代码,其运行界面如下图所示:



我们创建了一个Blazor WASM 9.0的程序,把时间轴的代码复制过来,并做一些改造,代码修改量不超过700行,也就是小于1%,比如:

if (e.ClickedItem.Text == "打开本地时间轴文档") {     using (OpenFileDialog ofd = new OpenFileDialog())     {         if ( #if MWGA             await #endif             ofd.ShowDialog() == DialogResult.OK)         {             var stream = #if MWGA                 await #endif                 ofd.OpenFile();             var reader = new StreamReader(stream, Encoding.UTF8, true);             var strXml = reader.ReadToEnd();             temperatureControl1.LoadDocumentFormString(strXml);             reader.Close();         }     } }

由于Blazor WASM是采用浏览器非阻断线程模式,为此我们实现了异步ShowDialog()函数,采用await语句来暂停当前代码执行,这样减少对旧代码的修改量。并使用了条件编译,使得同一份C#代码无需修改即可编译成.exe.wasm 文章关键词: 责编:Admin

图文推荐

热闻推荐

天天新闻网版权所有

报错:admin@qq.com (非诚勿扰)   QQ: 123456

赣ICP备17003504号