Is there any VB6 to C# migration tool?

55,756

Solution 1

VisualStudio offers (or at least offered) a wizard to do a conversion from VB6 to VB.NET (which could then be converted to C# with a bit of work, possibly helped by #develop's VB.NET <-> C# converter), but when last I used it, for anything non-trivial there was a lot of manual work needing to be done so I suspect you're probably better rewriting or porting by hand if this is a large and/or important application.

Solution 2

It might come across as a little bit cheeky but your brain might be the best tool to use. Could be worth the re-write.

Maybe you don't need to porting it. Could the VB6 be turned into a COM component? Port to COM, call from C#, home in time for Judge Judy.

Solution 3

As someone who has done this a bunch of times, this is not an easy process. You can use the VB6 to VB.Net tool as stated in this answer, and then use either Reflector or SharpDevelop to convert to C#. With the SharpDevelop conversion, a few caveats. It screws up all the array references and thinks that they are function calls, and all the logical operators are converted to bitwise logical operators (And becomes & not &&). With Reflector you lose a bunch of stuff. Also the Visual Studio converter fails on a lot of large projects, just hangs and never completes.

Once you have got your code converted into C#, you have to start the real work. The conversion gets you at best 50% of the way there, you have to fix a ton of stuff (you will see your code littered with TODO's), refactor a ton of stuff, and at the end you are left with C# that is a representation of your VB6 -- unless you have very nice VB6 code not a place you really want to be. Also all of your code with be littered with the VB helpers rather than using proper DotNet functions (all the string functions are helpers rather than class objects, for examples0. If you used Variants at all those all have to be rewritten. If you used a lot of API calls, they tend to need rewritting.

In the end you will get a base, but converting a large project (20-30 forms, 30 classes, 30 modules) can take several man months. Rewritting from scratch, however, may take twice as long and you lose all of your business logic. So, it can be done (I have done it with 3 or 4 large projects), but there is no panacea, no silver bullet, and any tool that says it will do it for you alone, is lying.

Solution 4

Artinsoft (Now renamed to Mobilize.Net) does just this, especifically the Visual Basic Upgrade Companion.

However, even after using the VBUC there's still some parts that of the system that needs to be migrated/proofed by hand. But it's usually a much smaller set of the original problem. And some of the migration issues have been resolved thanks to experience with past migrations.

Artinsoft is the same company that built the wizard that ships with Visual Studio, mentioned in theraccoonbear's post. However, if I'm not mistake the wizard only migrates VB6 to VB.Net.

Full disclosure: I work for Artinsoft

Solution 5

Open your project with a new version of Visual Studio, convert your code to VB.Net and then download .Net Reflector to help you with the C# transformation.

Good luck!

Share:
55,756
Admin
Author by

Admin

Updated on August 24, 2020

Comments

  • Admin
    Admin over 3 years

    Does anyone know a way to convert from VB6 code to C#?

    Is there a tool that can do this for me?

    Is there any migration process that I can follow to do this?

  • Ankur Kumar
    Ankur Kumar over 15 years
    This answer is misleading as the conversion from VB6 is filled with both subtle and gross changes in behavior. Do NOT do this. It is better to have a methodical plan for the conversion that treats .NET as a separate platform then rely on any of the conversion tools.
  • sebagomez
    sebagomez over 15 years
    yet, I believe it is a better approach that just having a method...
  • sebagomez
    sebagomez over 15 years
    The second works better than the first one
  • theraccoonbear
    theraccoonbear over 15 years
    "[...]home in time for Judge Judy" priceless!
  • Kevin Gale
    Kevin Gale over 14 years
    Good Luck is right! For any non trivial program there is a better chance of winning the lottery than producing anything useful with this method. :)
  • Kris Erickson
    Kris Erickson about 14 years
    .Net Reflector does a poor job converting from VBNet to C#, there are tons of labels, gotos, etc created by the process. Using a semantic converter (Like one found in CSharpDeveloper or such) is much better.
  • kjack
    kjack almost 14 years
    if your real work only begins when the code is converted to c# why wouldn't you leave it in vb.net? Were the people doing the cost benefit analysis making an informed decision?
  • kjack
    kjack almost 14 years
    Esteban. are there limits on the number of times the vbuc can be run on files? I'm referring to this statement on your website "Licensing is per application, allowing to run the VBUC several times upon the same VB6 files. "
  • Kris Erickson
    Kris Erickson almost 14 years
    Oh, there is a ton of work to do if you convert only to VB.Net, but there is no point in doing that work in VB.Net if you are going to translate to C#, fix it in the language you plan to end up in. We ported a few projects from VB6 to VBNet, but our developers are a lot more productive in C#.
  • Esteban Brenes
    Esteban Brenes almost 14 years
    If I'm not mistaken you'll basically be time limited (generally 1 year) during which time you can migrate as many times as you want. The license itself is quite permissive once you get to the actual execution. In most cases ArtinSoft just relies on the client doing right by the license terms.
  • kjack
    kjack almost 14 years
    Thanks for the information, Esteban, that sounds a lot better than the quote I gave which is suggestive of a quite restrictive limit.
  • MarkJ
    MarkJ almost 14 years
    Artinsoft are now offering a free license for their product, capable of upgrading 10,000 lines of code artinsoft.com/…
  • Morten Bergfall
    Morten Bergfall about 12 years
    Trial version offered pretty useless, and not easy to see if this product offers anything of value to VB6-clueless converters...
  • NoAlias
    NoAlias about 12 years
    +1 for the idea to turn it to COM.
  • bjan
    bjan about 8 years
    Both of these do not conver VB6 code
  • Victor
    Victor over 7 years
    That product was created by ArtinSoft (now Mobilize.Net) and it evolved to the VBUC.
  • Md Ashaduzzaman
    Md Ashaduzzaman over 3 years
    There is however another service available which converts VB6 code to C#. SELISE Phoenix provides the service (fully functional converted code) and post conversion support to companies availing it. phoenix.selise.ch