Migrating VB6 applications to .NET?
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
My company is currently taking our primary VB6 app (serves 100s of clients via RDS RemoteApps) and is converting to .net6 backend / vue frontend. We first looked at all the tools that have been mentioned so far. We would have been happy to stay a desktop app if we could have converted from VB6. In each case the use use of 3rd party controls (grids, drop downs, calendars, etc.) pretty much killed each of those options. I am bringing it up as a warning, so you are aware of a possible impediment. We could have attempted to convert and recoded to an updated front end, we chose not to after testing. For us the rough calculation didn't make sense to attempt to convert. VB6 and Crystal Reports were often used together. You didn't mention if CR is part of your project. We also use Crystal Reports for about 125 reports. About 15 of them are complex enough that we can't easily depracate CR. We came up with a way to host CR in container to save having a separate .net framework VM.
-
You are better off leaving the existing application as VB6 and just do the change to the database layer, VB6 still works perfectly and will continue to do so for a long time. Then just develop new features in .net when required. We spent about 5 man years converting one of our applications to VB.Net and now its just as (not)supported by Microsoft as VB6.
Interesting answer. Really depends on a system analysis but you could be right. That said, VB6 is slated to possibly bite the dust in 10 or so years. Better long-term planning might be to gradually move it to some other platform. It's pretty easy to maintain DB compatibility with multiple platforms. I don't see VB.net "just as not supported by MS" at all. I'm not saying I wouldn't choose something different, but VB support in VS22 seems to be pretty solid.
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
I had to migrate several projects from 6 to .NET back when. I found re-writing was pretty straightforward, the only thing that really slowed me up was not being able to use arrays of controls (which the VB6 projects used extensively). Worked out a work-around (which needed much more coding, but ran eventually). Good luck.
-
>
Quote:
Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money
Well, do it right the first time, or you will spend more time and more money to do the rewrite of the rewrite, or worse, the rewrite of the converted mess. Speaking from personal experience.....
Haha spoken as if OP has the power to make the decision between "Do it right" and "Do it right now". OP says VB6 dev is retiring. Therefore, there is a clock on the project and handoff. I suspect the decision makers will be more likely to take the straightest path, not necessarily the wisest path. I guess if I were involved, I would want it to be clear on whether this is purely a lift and shift migration project or a modernization project.
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
It's almost undoubtedly true that this code needs to be updated from an architectural standpoint as well. No disrespect to the soon-to-be retiree. I've been in a situation where the code was crap, but nobody on the business side could explain how it was supposed to work. Thus, reworking it was more of, "well, good luck, hope you figure it out." Hope you're not in that situation, Sander.
-
I have done this before, and how well it goes depends a lot on how good an engineer the person doing the conversion is. Put enough time and planning into the design you want to go to. Use value engineering to determine what has the most value in the conversion process. Don’t just replicate how the business rules are implemented. Migrate them using newer features where there is value in doing so. The more the VB code used OO techniques (available in VB4 - VB6), the easier your job will be. Don’t try to replicate VB procedural programming design in C#. Are your users desktop or browser? Determine the relative SDLC costs between WinForms and Blazor. Development time is less and performance is better with WinForms than any web-based GUI, but deployment costs may be higher. If you choose a web-based GUI, go with Blazor, not the Javascript-based approach. You’ll have less development time, better performance, and fewer headaches. Don’t farm out the work to consultants, H1-B developers, or offshore developers. The end result will need a lot of repair and be more expensive to maintain. Make sure to use someone in-house who is experienced in VB6 and in C#/.NET. A successful port will depend on deeply understanding both. One last thing - VB6 can host C# DLLs, including user controls for the VB6 GUI, all written in pure C#, using COM Interop. I did this a while back and it works beautifully if the developer understands both C# COM Interop and how VB6 recognizes classes, interfaces, and events. That allowed us to migrate the app from VB6 to fully C# piece by piece, without wasted code. Best of luck to you!
The engineer will be me and possibly an employee. Best of the best, top notch, outstanding, brilliant, and the employee ;p
MSBassSinger wrote:
The more the VB code used OO techniques (available in VB4 - VB6)
None whatsoever, the original programmer is known to use hidden controls to hold values because variables are too difficult :((
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
We had to do what you have to do big time. But with todays knowledge, I would like to encourage you questioning not only VB.Net vs C#. Depending on the charactor of the application, having a Web Application might be worth thinking about. You may want to have a look at JMIX which is a Java Framework on top of Spring Boot which gives you almost the easy of good old VB6. It gifts you with all the typical features of a modern application and the sample apps they offer could be a good starting point for modifying them to cover the functionality you need. No, I am not getting paid by those folks :-) ... and I am still a strong supporter of VB (adopted it starting at Version 1.0). But now I heavily rely on JMIX and Windows getting independent from operating systems.
It's not going to be Java.
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
You are better off leaving the existing application as VB6 and just do the change to the database layer, VB6 still works perfectly and will continue to do so for a long time. Then just develop new features in .net when required. We spent about 5 man years converting one of our applications to VB.Net and now its just as (not)supported by Microsoft as VB6.
Member 15966771 wrote:
VB6 still works perfectly and will continue to do so for a long time.
It works, but that's all you can say about it. Development and installation are a pain compared to modern solutions. There also aren't too many developers who are willing to maintain and develop old VB6 applications, especially this one. Besides, it works because it works for as long as it works. If Microsoft pulls the plug, which they officially did in 2008, 15(!) years ago, this company can file for bankruptcy.
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
It's almost undoubtedly true that this code needs to be updated from an architectural standpoint as well. No disrespect to the soon-to-be retiree. I've been in a situation where the code was crap, but nobody on the business side could explain how it was supposed to work. Thus, reworking it was more of, "well, good luck, hope you figure it out." Hope you're not in that situation, Sander.
Undoubtedly, this programmer is known to use hidden controls to hold values because variables are too difficult :((
agolddog wrote:
Thus, reworking it was more of, "well, good luck, hope you figure it out." Hope you're not in that situation, Sander.
I hope so too! :omg:
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
The problem is VB.NET is your target. VB.NET is not getting any new features. There was a time when MS said they were developing VB.NET and C# side-by-side, with the same features between the two. That has since been killed. VB.NET is going to "wither on the vine" without new features. I'm going to say your best bet is to rewrite from scratch in C# instead.
Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
Dave KreskowiakYeah, my preference is .NET web application if possible. For desktop apps either Uno or .NET MAUI. All in C#, of course. I used to be fluent in VB.NET, but use it or lose it, and I'm not using it a lot anymore. Of course the client gets to have a say in this too :sigh:
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
The company I work for has a large VB6 code base. I am the project lead for updating the main application to .NET 6 WPF/MVVM. In the span of about an year, one other developer and me have migrated about 75% of the old application. I would definitely stay away from the automatic converter tools. While they do work, you will be left with the same mess of an application that you originally inherited. Now is the time to use modern design principals to develop a testable and extensible application. Not to mention multiple threads! We also made the decision to keep the same look and feel as the VB6 application. Users have 20+ years of experience with the VB6 application, so giving them something completely new that works differently was met with major objections. Instead of thinking "Run", think I have the opportunity to build something from scratch using a better architecture and use cutting edge technology. That sounds like a lot of fun to me.
-
The company I work for has a large VB6 code base. I am the project lead for updating the main application to .NET 6 WPF/MVVM. In the span of about an year, one other developer and me have migrated about 75% of the old application. I would definitely stay away from the automatic converter tools. While they do work, you will be left with the same mess of an application that you originally inherited. Now is the time to use modern design principals to develop a testable and extensible application. Not to mention multiple threads! We also made the decision to keep the same look and feel as the VB6 application. Users have 20+ years of experience with the VB6 application, so giving them something completely new that works differently was met with major objections. Instead of thinking "Run", think I have the opportunity to build something from scratch using a better architecture and use cutting edge technology. That sounds like a lot of fun to me.
Tyler Evensen wrote:
Instead of thinking "Run", think I have the opportunity to build something from scratch using a better architecture and use cutting edge technology. That sounds like a lot of fun to me.
Yeah, my thoughts exactly. These are not easy jobs, but they can be quite fulfilling. We plan to keep the UI more-or-less the same, but to give it a more modern look and feel. No big overhauls there anyway. Hopefully the client will say the same.
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
I migrate VB6 to VB.net and C#. It isn't as difficult as you think. Feel free to contact me by email.
ed
Slow Eddie wrote:
Feel free to contact me by email.
How?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
-
The problem is VB.NET is your target. VB.NET is not getting any new features. There was a time when MS said they were developing VB.NET and C# side-by-side, with the same features between the two. That has since been killed. VB.NET is going to "wither on the vine" without new features. I'm going to say your best bet is to rewrite from scratch in C# instead.
Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
Dave KreskowiakThe belief that MS is eventually going to kill off VB.Net is incorrect - but only because one person in MS said something incredibly misleading like, "We are no longer going to co-evolve VB.Net and C#." The reality is that wherever VB.Net and C# are both language choices, MS will update both languages if a new substantive feature is added (except for .NET Framework 4.8). But if MS introduces something completely new, then C# will be the only language available. My thinking is that MS decided that, long term, they don't want to spend resources supporting two languages in every new 'platform' going forward forever. Minimizing duplicate work is a good business decision, and I think that C# was the 'winner' only due to perceived popularity. That decision would have been made several years ago. The March 2023 TIOBE score rated VB.Net as the 6th most popular language, where C# is ranked 5th. In 2018 VB.Net was ranked 15th and C# was ranked 5th. C# has not moved in rank but VB.Net has moved up by 10 ranks. Hmmm - did MS really make the right choice? I think not. See this site: TIOBE Index - TIOBE[^] Also, they use 'Visual Basic' for 'VB.Net' - you can read TIOBE's description of why they do this. I am a VB.Net developer in WinForms. From what I can see - VB.Net is a better language. Not because one language allows for a better user experience - but because it allows for a better developer experience. The syntax is simpler, there's no need to type a semicolon at the end of every line of code, and there are no braces. Also, VB.Net does respect character capitalization in variables - a possible opportunity for error in C#. Does everyone remember KISS? VB.Net = KISS. All other things being equal you can finish an application faster using VB.Net than using C#. Anyone have customers? Customers will call you back for their next project if you can deliver faster. Have wallet? - Need customers! Both languages compile to the .NET Runtime. They are actually so similar 'under the covers' that you can get an extension in Visual Studio to quickly convert from one language to the other. So why keep using the more difficult and time-consuming language? Also, using .NET Framework 4.8 is a good choice for a long-term business app that needs solid stability and little maintenance. MS has stated, "As long as there is a Windows OS, there will be a .NET Framework 4.8." The
-
The problem is VB.NET is your target. VB.NET is not getting any new features. There was a time when MS said they were developing VB.NET and C# side-by-side, with the same features between the two. That has since been killed. VB.NET is going to "wither on the vine" without new features. I'm going to say your best bet is to rewrite from scratch in C# instead.
Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
Dave KreskowiakThe belief that MS is eventually going to kill off VB.Net is incorrect - but only because one person in MS said something incredibly misleading like, "We are no longer going to co-evolve VB.Net and C#." The reality is that wherever VB.Net and C# are both language choices, MS will update both languages if a new substantive feature is added (except for .NET Framework 4.8). But if MS introduces something completely new, then C# will be the only language available. My thinking is that MS decided that, long term, they don't want to spend resources supporting two languages in every new 'platform' going forward forever. Minimizing duplicate work is a good business decision, and I think that C# was the 'winner' only due to perceived popularity. That decision would have been made several years ago. The March 2023 TIOBE score rated VB.Net as the 6th most popular language, where C# is ranked 5th. In 2018 VB.Net was ranked 15th and C# was ranked 5th. C# has not moved in rank but VB.Net has moved up by 10 ranks. Hmmm - did MS really make the right choice? I think not. See this site: TIOBE Index - TIOBE[^] Also, they use 'Visual Basic' for 'VB.Net' - you can read TIOBE's description of why they do this. I am a VB.Net developer in WinForms. From what I can see - VB.Net is a better language. Not because one language allows for a better user experience - but because it allows for a better developer experience. The syntax is simpler, there's no need to type a semicolon at the end of every line of code, and there are no braces. Also, VB.Net does respect character capitalization in variables - a possible opportunity for error in C#. Does everyone remember KISS? VB.Net = KISS. All other things being equal you can finish an application faster using VB.Net than using C#. Anyone have customers? Customers will call you back for their next project if you can deliver faster. Have wallet? - Need customers! Both languages compile to the .NET Runtime. They are actually so similar 'under the covers' that you can get an extension in Visual Studio to quickly convert from one language to the other. So why keep using the more difficult and time-consuming language? Also, using .NET Framework 4.8 is a good choice for a long-term business app that needs solid stability and little maintenance. MS has stated, "As long as there is a Windows OS, there will be a .NET Framework 4.8." The
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
Having written and rewritten many programs in the last 35 years I can honestly say that without looking at the way you code I can't tell if the converters will work or not. Even current converters like Telrik have issues converting C# to VB.NET have issues. The one thing that is 100% certain is this. If you review what you used to do and compare it to what you can now do you will probably get rid of a large portion of old code that is no longer needed. If you worked in VB6 before .net and then you opened, closed, parsed files the old fashioned way either in binary or text. You can now ditch nearly all of that code lets face appending a line of text to a file used to take 10 lines of code now, 1 maybe 2? Splitting and parsing lines are now inherent, so is mid$ (now substring) and there are lots of new features to just the string object. vb6 had Drag and Drop nightmares .NET a breeze. My point is the GUID may or may not change but the majority of code behind it probably won't take long to deal with side by side. If you run a conversion and it fails then you have to discover and repair code you didn't write and that sucks. I rewrote a utility yesterday because it was built in 2001 and updated, but not rewritten in 2003. I opened the old code on one side the new on the other and reviewed it. The classes I had written had very few issues and with a few minor modifications those were done in less than a 1/2 hour. The rest of the time I spent dumping old code I no longer need and, I added a barcode class I had built about 5 years ago. In short I have a new tool that is 10 times faster, more capable and easier to use for the users. I would say if you have a conversation system you can test it but then look at the code. If you don't understand it, rewrite it. If it fails, rewrite it....or just rewrite it. And don't believe those that say VB.NET is going away soon. They have said that for 15 years and it is more common than you know. The old man in Illinois
-
Dude, all I said was moving to VB.NET isn't really a good choice because of its limited lifetime. If a conversion to .NET (anything) was going to happen, a more appropriate target would be C#.
Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
Dave KreskowiakThere is no doubt that C# is a solid move, provided that is in your skillset. If not vb.net is not going away as fast as everyone says. It was supposed to be gone in 2010,2015, 2019, 2022 and there are still MANY that use it. I have a friend who converted all of his work to C# and started his own business and nearly all the work he does is vb.net, not conversions. just vb. So until everyone makes the switch it will exist and probably till the end of my lifetime.
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
Sander I have a copy of VB 6.0 Professional Edition + Library on CD IF needed which I doubt! Also two great books "The Waite Groups VB 6 Interactive Course" and Murach's VB 6 You are welcome to all FREE. Challenges and Work. Work pays the bills. Challenges can be fun but seem to create bills. When you have time lets us know about the progress it will thoroughly enjoyed by many.
-
The problem is VB.NET is your target. VB.NET is not getting any new features. There was a time when MS said they were developing VB.NET and C# side-by-side, with the same features between the two. That has since been killed. VB.NET is going to "wither on the vine" without new features. I'm going to say your best bet is to rewrite from scratch in C# instead.
Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
Dave KreskowiakBack in 2003, when I was first learning C#, an instructor said that Microsoft was going with VB.net for future improvements and that C# would not last long. Similarly: In 2012, Microsoft said that OLEDB was dead and there would not be future versions. Then in 2018 they admitted that OLEDB was too important die and they released a new version -- as I knew they would. I find it best to ignore any prognostication.
-
What the title says. For most people this (hopefully) happened some twenty years ago, but I'm going to inherit a lot of VB6 applications, some even still work with a dBase database. The programmer is going into retirement and this (reasonably large) company needs someone to take care of their software. Our (and their) first priority is getting off of dBase, the current programmer already started working on that. Next we'll need to move VB6 to .NET (Framework, probably). I know there used to be converter tools around, but I've heard bad things about them. They're usually not worth the effort. Ideally, I'd rather just rewrite everything to web-based and cloud-ready .NET 6 applications, but I don't think we'll have the time nor money. Any tips (other than "RUN!")?
Best, Sander Azure DevOps Succinctly (free eBook) Azure Serverless Succinctly (free eBook) Migrating Apps to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript
I'm doing that right now. I got hired to fix some VB6 stuff and then write a connected app in webforms .net. After that they kept me on to do support and maintenance. As time allows, I re-write the VB6 to vb.net. Anything new is vb.net. In a couple of instances I needed some of the VB6 functionality in vb.net to do some quick and dirty work. I copied the VB6 to a vb.net module and just went through line by line to make it compile in vb.net. It was surprisingly easy. I'd not recommend that for anything that is going to be maintained long term, but it might get you "over the hump" while port/re-write. Someone else posted link her the tools and instructions to get VB6 to work on Windows 10. It actually works pretty well! Also the are a couple of project underway to build IDEs and compilers for VB6. Twin BASIC looks pretty impressive. Here is a link to learn more: https://www.vbforums.com/showthread.php?890181-TwinBasic[^] Good luck. PS: Ask for a raise. They going have a tough time finding some who wants that job!