I recently automated a simple VB6 desktop to web migration using the Wisej framework.
See the screen shot below
- Left: Calculator Form in VB6 designer
- Middle: Calculator Form in Wisej designer in Visual Studio
- Right: Calculator Form running in Chrome as a web application
The works much like the original even including the keyboard support.
For this sample there were only a few differences from simply letting gmStudio do a standard VB6 to WinForms upgrade:
- Using a Wisej web application csproj file rather than the one generated for a WinForms app
- Using a Wisej startup code file rather than the one generated for Winforms
- Deploying a few supporting files to the folder (default.html, default.json, web.configs)
- A number of tweaks to the code to address places where Wisej conventions differ from WinForms
For this first test, I simply used the gmPL post-editting commands make the replacements. (see “Quick and Dirty” rules below)
In an actual upgrade solution, I would create a generalized Wisej upgrade configuration that could be used with many different VBPs and code files and also develop a set of rules files to deal with third-party controls. In a project context, we would further customize the rules so that various customer-specific requirements are automated such as other Wisej/.NET standards.
My experience with Wisej is limited to only a few hours of paying around, but I find it to be an an incredibly sophisticated development and runtime framework. I would love to say more, but I certainly cannot do it justice here. Visit Wisej on the web to learn more.
“Quick and Dirty” upgrade rules to rewrite from VB6 (desktop) for Wisej/C# (web)
<Author> <Fix host="Calculator" name="PostEdit"> <Replace name="change namespace Winforms to Wisej.Web" > <OldBlock><![CDATA[using System.Windows.Forms;]]></OldBlock> <NewBlock><![CDATA[using Wisej.Web;]]></NewBlock> </Replace> <Replace status="active" name="remove using WinForms"> <OldBlock><![CDATA[System.Windows.Forms.]]></OldBlock> <NewBlock><![CDATA[Wisej.Web.]]></NewBlock> </Replace> <Replace status="active" name="remove FlatStyle"> <OldBlock><![CDATA[FlatStyle]]></OldBlock> </Replace> <Replace status="active" name="cleanup using System.Data"> <OldBlock><![CDATA[using System.Data;]]></OldBlock> </Replace> <Replace status="active" name="cleanup using System.CompilerServices"> <OldBlock><![CDATA[using Microsoft.VisualBasic.CompilerServices;]]></OldBlock> </Replace> <Replace name="rework old MenuStrip initialization boilerplate, not needed"> <OldBlock><![CDATA[ this.MainMenuStrip = this.mainMenu1; this.mainMenu1.AutoSize = false; this.MainMenuStrip.Height = 20; this.Controls.Add(this.mainMenu1); ]]></OldBlock> <NewBlock><![CDATA[ this.Menu = this.mainMenu1; ]]></NewBlock> </Replace> <Replace status="active" name="rename MenuStrip class"> <OldBlock><![CDATA[MenuStrip]]></OldBlock> <NewBlock><![CDATA[MainMenu]]></NewBlock> </Replace> <Replace status="active" name="rename ToolStripMenuItem class"> <OldBlock><![CDATA[ToolStripMenuItem]]></OldBlock> <NewBlock><![CDATA[MenuItem]]></NewBlock> </Replace> <Replace name="Remove hideSelection setting (default?)"> <OldBlock><![CDATA[.HideSelection = ]]></OldBlock> </Replace> <Replace name="Rename BorderStyle enum entry"> <OldBlock><![CDATA[.BorderStyle.Fixed3D;]]></OldBlock> <NewBlock><![CDATA[.BorderStyle.Solid;]]></NewBlock> </Replace> <Replace name="Rename BorderStyle enum entry"> <OldBlock><![CDATA[.BorderStyle.FixedSingle;]]></OldBlock> <NewBlock><![CDATA[.BorderStyle.Solid;]]></NewBlock> </Replace> <Replace status="active" name="rework ShortcutKeys"> <OldBlock><![CDATA[ShortcutKeys = Keys.Control | Keys.]]></OldBlock> <NewBlock><![CDATA[Shortcut = Shortcut.Ctrl]]></NewBlock> </Replace> <Replace name="Change menu.Items property name"> <OldBlock><![CDATA[this.mainMenu1.Items.AddRange(new Wisej.Web.ToolStripItem]]></OldBlock> <NewBlock><![CDATA[this.mainMenu1.MenuItems.AddRange(new Wisej.Web.MenuItem]]></NewBlock> </Replace> <Replace name="change menu.DropDownItems name"> <OldBlock><![CDATA[this.mnuEdit.DropDownItems.AddRange(new Wisej.Web.ToolStripItem[] {]]></OldBlock> <NewBlock><![CDATA[this.mnuEdit.MenuItems.AddRange(new Wisej.Web.MenuItem[] {]]></NewBlock> </Replace> <Replace name="rename FormBorderStyle enum entry"> <OldBlock><![CDATA[.FormBorderStyle.FixedSingle;]]></OldBlock> <NewBlock><![CDATA[.FormBorderStyle.Fixed;]]></NewBlock> </Replace> <ReplaceFile name="Override csproj file using Wisej.csproj" lang="csproj" source="Calculator.csproj" target="..\usr\Wisej\Wisej.csproj" /> <ReplaceFile name="Override startup file using program.cs" lang="csproj" source="Calculator_StartUp.cs" target="..\usr\Wisej\program.cs" /> </Fix> </Author>