青岛网站建设开发外包做网站的网站源码
2026/4/18 4:27:27 网站建设 项目流程
青岛网站建设开发外包,做网站的网站源码,百度网站诚信认证,创意个人网页设计1. 一句话介绍MWGA是Make WinForms Great Again的缩写#xff0c;它是一个工具软件#xff0c;能快速地将使用了GDI的WinForm.NET程序快速迁移到Blazor WASM平台上#xff0c;将程序代码修改量控制在10%以下#xff0c;从而复活全球1000亿行C#代码。2. 项目背景据估计…1. 一句话介绍MWGA是Make WinForms Great Again的缩写它是一个工具软件能快速地将使用了GDI的WinForm.NET程序快速迁移到Blazor WASM平台上将程序代码修改量控制在10%以下从而复活全球1000亿行C#代码。2. 项目背景据估计全球范围内的WinForms开发者约有300万至500万人占.NET开发者总数的40%至50%。生产环境中运行着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文件两者运行效果保持高度一致。软件下载地址4. 竞品对比将WinForms程序迁移到Blazor WASM上目前业界还有以下解决方案代码生成式迁移使用工具软件解析WinForms的源代码自动生成Blazor代码后续独立维护。手动重构参考原先的WinForms程序从零开始手写Blazor组件完全脱离原先的WinForms程序。混合桥接WebView2在WinForms程序中嵌入一个WebView2的浏览器组件将软件功能一点点的迁移到BS结构中。MWGA和其他相同目标的解决方案的对比如下对比维度MWGA代码生成式迁移手动重构混合桥接迁移效率极致快速数小时导入项目即可渲染很少的编码适配迁移效率远超其他方案。较快数天极慢周/月级中等天/周级技术门槛极低零Blazor/前端基础要求仅需熟悉原有WinForms项目普通开发即可快速上手大幅降低迁移学习成本中需基础Blazor知识需学习新的Blazor技术栈高精通Blazor生态需全面掌握Blazor前端技术栈中高需双栈知识需同时掌握WinForms与前后端技术栈代码修改量普通项目代码零修改。复杂项目和GDI项目代码修改量小于10%中生成代码后需5%-20%的适配修改如控件事件绑定、样式调整GDI功能需大幅改写30%-60%需适配Blazor技术栈规范100%需全盘重写UI代码仅可复用少量纯业务逻辑代码GDI绘图需完全基于Blazor/JS重构需彻底切换至Blazor技术栈中高需修改30%-50% WinForms代码适配桥接层同时编写Blazor前端交互代码GDI需额外适配桥接渲染逻辑需掌握双技术栈适配规则成本优势极致成本优势很少编码人力成本、无学习成本无需后续代码维护成本纯前端部署无服务器运维成本含GDI的项目可大幅节省重写成本中需承担代码生成后适配人力成本后续维护成本较低GDI适配需额外增加成本需投入Blazor技术栈培训成本极高全量重写人力成本高前期学习成本后期维护成本叠加GDI重构成本占比超50%高双栈开发人力成本高桥接层兼容维护成本持续存在无跨平台成本优势GDI适配进一步推高成本需投入双技术栈学习与适配成本GDI 支持良好支持通过模拟System.Drawing.Graphics等核心类型实现GDI绘图迁移可保留原有绘图逻辑与交互效果同一套代码在WinForms与Blazor WASM环境下界面、逻辑一致技术栈无变动绘图相关开发经验可直接复用有限支持仅能识别基础GDI语法复杂绘图逻辑如自定义渲染、动态绘图无法直接生成代码需大幅改写需基于Blazor技术栈重构绘图逻辑需完全重构无原生GDI支持需基于Blazor组件/HTML5 CanvasJS重新实现所有绘图功能学习与开发成本极高需彻底抛弃原有GDI开发技术栈部分支持可保留WinForms原生GDI渲染但需适配WebView2桥接通信逻辑存在性能损耗且跨平台受限需掌握双栈下GDI适配技术技术栈延续性完全延续无需改变企业现有WinForms技术栈开发人员可复用原有WinForms开发经验与技能项目代码结构、开发规范保持不变仅改变前端渲染形态部分延续可复用WinForms业务逻辑经验需切换至Blazor技术栈开发规范与代码结构需适配Blazor框架要求完全切换需彻底抛弃WinForms技术栈全面转向Blazor前端技术栈原有开发经验复用率低双栈并存需同时维护WinForms与Blazor两套技术栈适配场景快速验证迁移效果对跨平台需求高、数据安全敏感、迁移周期紧张、成本控制严格的场景优势适配含GDI绘图功能的WinForms项目迁移注重技术栈延续性、需复用现有开发团队能力的企业项目需长期维护、逐步演进纯Blazor架构项目无复杂GDI功能的项目企业可接受技术栈部分切换的项目大型项目、复杂逻辑、追求极致性能/长期价值可接受全量重构成本与技术栈完全切换的GDI项目企业有明确Blazor技术栈转型规划的项目必须保留WinForms逻辑、仅Windows平台使用含复杂GDI功能但无法承担重构成本的项目企业可接受双技术栈并存的短期过渡项目5. 使用案例一扫雷游戏程序2%代码修改量扫雷是一个经典的Windows游戏程序我们从下载了一个基于MS .NET Framework2.0的扫雷程序这是一个10年前写的Winforms程序包含约2500行C#代码以及若干图片资源文件编译成.exe文件后运行如下图所示这个程序大量使用System.Drawing.Graphics.DrawLine()/DrawImage()/FillRectangle()的接口来绘制游戏界面。我们创建了一个Blazor WASM 9.0的程序将扫雷程序源码文件复制过来并做一些兼容性修改如下图所示#ifMWGApublicstaticasyncValueTaskShowSelf(...)#elsepublicstaticShowSelfResultShowSelf(...)#endif{boolresult;frmCustomGame cg newfrmCustomGame();cg.tbHeight.Text height.ToString();cg.tbWidth.Text width.ToString();cg.tbMineCount.Text mineCount.ToString();cg.Location location;#ifMWGAif(awaitcg.ShowDialog(parent) DialogResult.OK)#elseif(cg.ShowDialog(parent) DialogResult.OK)#endif{// ...}}由于Blazor WASM是采用浏览器非阻断线程模式为此我们实现了异步ShowDialog()函数采用await语句来暂停当前代码执行这样减少对旧代码的修改量。最终我们对旧代码修改了不超过50行占比2%就让同一套代码可以无需修改即可编译成.exe和.wasm文件。最后编译成.wasm的扫雷程序在谷歌浏览器中的运行结果如下程序中的上千行图形绘制代码未做任何修改如下图所示protectedoverridevoidOnPaint(PaintEventArgs e){Rectangle rect ClientRectangle;Graphics g e.Graphics;g.FillRectangle(grayBrush, rect);drawFrame(g,newRectangle(rect.Left, rect.Top, rect.Width -1, rect.Height -1));if(Image !null){intoffset;if(pressed)offset 1;elseoffset 0;g.DrawImage(Image, rect.Left 4 offset, rect.Top 4 offset);}}6. 使用案例二计算器无代码修改我们开发了一个Winform.NET的计算器程序包含460行C#代码其运行界面如图所示这里响应了窗体的大小改变事件用于设置按钮和文本框的位置和大小其代码如下privatevoidCalculatorForm_Resize(objectsender, EventArgs e){UpdateControlLayout();}//////动态更新所有控件的位置和大小完全填充窗体无空白///privatevoidUpdateControlLayout(){// 获取窗体客户端区域排除边框Rectangle clientRect this.ClientRectangle;// 1. 处理显示屏占顶部整行高度占客户端区域的1/6剩余部分给按钮intdisplayHeight clientRect.Height /6;// 显示屏位置左、上、右间距为fixedPadding高度为displayHeighttxtDisplay.Location newPoint(_fixedPadding, _fixedPadding);varnewSize newSize(clientRect.Width -2* _fixedPadding, displayHeight -2* _fixedPadding);// ...}这份C#代码未做任何修改借助MWGA它在Blazor WASM中运行界面如下所示7. 基本原理MWGA基本原理是模拟System.Windows.Forms.Control类型和System.Drawing.Graphics类型来实现WinForms代码低修改量的迁移。MWGA建立了以下的功能模块映射HTML功能模块MWGA功能模块canvasSystem.Drawing.GraphicsbuttonSystem.Windows.Forms.ButtonimgSystem.Windows.Forms.PictureBoxdivSystem.Windows.Forms.FormSystem.Windows.Forms.PanelSystem.Windows.Forms.ControlSystem.Windows.Forms.LabelnavSystem.Windows.Forms.MainMenuinput typetext或textareaSystem.Windows.Forms.TextBoxwindow.alert()System.Windows.Forms.MessageBoxdivSystem.Windows.Forms.MessageBoxNewelement.style.cursorSystem.Windows.Forms.Cursorwindow.setTimeout()System.Windows.Forms.TimerMouseEvent,KeyEventWin32 Message包括WM_KEYUP、WM_KEYDOWN、WM_LBUTTONDOWN、WM_LBUTTONUP等等MWGA内部还模拟实现了Win32 Message loop和消息队列构造出了一个Winforms的底层运行框架使得用户的基于Winforms的C#代码重新编译后即可运行在BlazorWASM上。8. MWGA支持的关键功能点 (2026-1-15)System.Drawing命名空间System.Drawing.BitmapSystem.Drawing.BrushSystem.Drawing.FontSystem.Drawing.GraphicsSystem.Drawing.PenSystem.Drawing.SolidBrushSystem.Drawing.Drawing2D.MatrixSystem.Windows.Forms命名空间System.Windows.Forms.ApplicationSystem.Windows.Forms.ButtonSystem.Windows.Forms.ControlSystem.Windows.Forms.CursorSystem.Windows.Forms.FormSystem.Windows.Forms.ImageListSystem.Windows.Forms.MainMenuSystem.Windows.Forms.LabelSystem.Windows.Forms.MessageBoxSystem.Windows.Forms.MessageBoxNewSystem.Windows.Forms.PanelSystem.Windows.Forms.PictureBoxSystem.Windows.Forms.ScreenSystem.Windows.Forms.TextBoxSystem.Windows.Forms.Timer资源管理System.Resources.ResourceManagerSystem.ComponentModel.ComponentResourceManager平台支持开发环境: Blazor WebAssembly 9.0/10浏览器: Chrome, Firefox and other mainstream browsers操作系统: Windows, Linux, Android9. 多语言支持MWGA支持多语言开发。MWGA内部所有的字符串都剥离出来形成一个字符串资源JS文件其内容如图所示window.__DCResourceStrings {AboutBoxDesc:显示该组件的关于对话框,AccDGCollapse:折叠,AccDGEdit:编辑,AccDGExpand:展开,AccDGNavigate:定位,AccDGNavigateBack:向后定位,AccDGNewRow:(新建),AccDGParentRow:父行,AccDGParentRows:父行,AccessibleActionCheck:选中,AccessibleActionClick:单击,AccessibleActionCollapse:折叠,AccessibleActionExpand:展开,AccessibleActionPress:按,AccessibleActionUncheck:取消选中,// ...};我们目前提供简体中文版和英文版用户可以修改这个JS文件来使用自己的语言。另外MWGA支持ComponentResourceManager类型如图所示privatevoidInitializeComponent(){varresources newSystem.ComponentModel.ComponentResourceManager(typeof(dlgMessage));this.panel1 newSystem.Windows.Forms.Panel();this.pictureBox1 newSystem.Windows.Forms.PictureBox();this.label1 newSystem.Windows.Forms.Label();this.txtMessage newSystem.Windows.Forms.TextBox();this.btnOK newSystem.Windows.Forms.Button();this.btnCancel newSystem.Windows.Forms.Button();this.panel1.SuspendLayout();((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();this.SuspendLayout();// ...}用户可以将程序资源设置到Form.resx文件中编译后即可使用窗体资源文件。未来MWGA将增强对于.resources.dll的多语言的支持。10. 开发和部署MWGA只包含一个3.8MB大小的DCSoft.MWGA.dll文件就已经包含了所有的功能不依赖任何其他第三方组件。开发者可参考提供的演示程序来进行基于MWGA的开发。主要步骤是第一创建Blazor WASM项目创建一个Blazor WASM 9.0/10.0的程序添加对DCSoft.MWGA.dll的程序集引用。目前不支持Blazor WASM 7.0/8.0。第二复制源代码将要迁移的WinForms程序的源代码以及资源文件全部复制到项目中。第三添加引导程序添加标准化的MWGA的引导程序代码添加运行程序界面的HTML文件。第四兼容性修改对用户程序代码进行必要的兼容性检查和修改主要修改点有标准WinForms功能点MWGA修改说明Form.ShowDialog()要将用户函数改造成异步模式然后使用await Form.ShowDialog()支持P/Invoke可以使用[DllImport]来导入外界API函数。不支持P/Invoke必须修改用户代码来删除P/Invoke功能。不过如果P/Invoke功能没被触发程序仍然能正常运行。窗体资源文件.resx由于源代码文件目录结构改变导致生成的.resx文件重命名需要调整用户代码来设置正确的名称。MWGA自己提供的ComponentResourceManager、ResourceManager已经能自动处理这种.resx的重命名。可直接重写Control.OnPaint方法需要在控件构造函数中调用DCSoft.MWGASystem.SetControlOwnerDraw(this);来通知MWGA要针对这个控件启用Graphics子模块。启用Graphics子模块需要消耗点资源非必要就不要启用。MessageBox.Show()可以继续使用MessageBox.Show()但是底层调用了window.Alert()来模拟的用户界面很丑。如果需要高仿请使用await MessageBoxNew.Show()需要将用户函数改造成异步模式。第五编译运行编译运行程序。MWGA支持谷歌、火狐等主流浏览器。支持Windows、Linux、Android操作系统。不支持Windows XP、Windows 7等老旧操作系统。发布到生产环境时可以考虑使用将Blazor WASM程序文件集合打包成一个单独的JS文件方便部署和维护。11. 安全性说明MWGA并不是开源软件但我们采取以下措施来保证这个软件是安全的限制使用范围MWGA的唯一的文件DCSoft.MWGA.dll限制为只能用于Blazor WASM开发。对于其他的软件类型比如WinForms、ASP.NET CORE、命令行等等不会产生任何效果。纯前端组件MWGA是一个纯前端的软件组件没有服务器端程序只能运行在浏览器沙盒中没有访问数据库、本地文件系统、注册表和硬件的权限。无网络操作MWGA承诺不会执行任何网络操作包括http、ftp、Web Socket等等。而且用户监控浏览器的异常网络行为也是很容易的事情。打包建议我们建议用户使用将Blazor WASM软件打包成一个单独的JS文件。可以减少下载程序文件的网络操作甚至使用本地file://协议运行。进一步的减少网络安全风险。无本地数据访问MWGA承诺不访问任何本地数据包括访问浏览器cookies、localStorage、IndexDB、navigator对象等等。无高权限操作MWGA承诺不会执行高权限有风险的操作。比如操作摄像头、位置信息获取等等。用户代码安全管控对于用户提供的WinForms应用程序发出访问文件或者数据库连接的请求MWGA都会触发JS事件让开发者自己写代码响应事件来处理这种高权限的行为。对于相关的安全风险MWGA完全避嫌。未来MWGA会提供高频变化的安全Token机制强化Winforms用户代码安全行为的管控。错误隔离当MWGA或用户代码由于BUG导致程序错误和卡死由于它是纯前端组件只能影响到当前终端重启客户端浏览器即可恢复不会影响服务器安全风险小。信创认证MWGA的姐妹软件DCWriter5采用了相同的软件架构。DCWriter5已经拿到统信、麒麟、方德操作系统原厂适配认证。这间接说明MWGA符合国产信创的要求。安全提醒当MWGA出现了本文档说明之外的高权限行为可以怀疑DCSoft.MWGA.dll不是正版的或者遭到病毒和木马的侵犯。即使如此由于浏览器安全沙盒的限制用户的运行环境仍然是安全的。12. 版权说明MWGA为商业闭源产品南京都昌信息科技有限公司拥有全部版权严禁破解和盗版。演示项目为开源示例用于演示迁移流程与验证兼容性。有任何疑问请联系28348092qq.com 或者在上留言。南京都昌信息科技有限公司2026年1月15日

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询