有没有VB6转C#的迁移工具?

37

有没有办法将VB6代码转换为C#?

有没有工具可以帮我完成这个过程?

有没有迁移流程可以让我按照步骤进行呢?


在一个项目中,我们尝试使用gmStudio。它会生成代码。但事实仍然是,它仍然是VB6代码的形式。编码仍然是VB的编码方式。如果你想升级,为什么不进行完全重写呢?因为即使转换工具完成了它的工作,还有很多工作要做。 - auo
你可以使用VB.NET 2008捆绑的VBUW将代码转换为VB.NET,然后使用Roslyn团队的Visual Studio插件将输出转换为C#。我自己也试过。 - R.J. Dunnill
然而,还有另一项服务可用,可以将VB6代码转换为C#。SELISE Phoenix提供该服务(完全功能的转换代码)并向使用该服务的公司提供转换后的支持。https://phoenix.selise.ch/ - Md Ashaduzzaman
如果对某人有所帮助的话,我已经写了一个用VB6编写的程序,并可以免费进行任何操作... https://github.com/bhoogter/VB6TocSharp - User51
10个回答

28

VisualStudio提供(或者至少曾经提供)一个向导程序,用于将VB6转换为VB.NET(然后可以通过一些工作将其转换为C#,可能是通过#develop 的VB.NET <-> C# 转换器),但是当我上次使用它时,对于任何复杂的东西都需要大量手动工作,所以如果这是一个大型和/或重要的应用程序,我认为最好手工重写或迁移。


2
该产品是由ArtinSoft(现在的Mobilize.Net)创建的,并发展成了VBUC。 - willvv

12

虽然可能有点冒失,但你的大脑可能是最好的工具。也许值得重写。

也许你不需要移植它。VB6可以转换为COM组件吗? 移植到COM,在C#中调用,还能及时回家看Judge Judy。


4
及时回家看《法官裁决》,太宝贵了! - theraccoonbear
1
+1 的想法将其转化为 COM。 - NoAlias

10
作为一个已经做过许多次的人,这并不是一个容易的过程。你可以使用VB6到VB.Net工具,如此答案所述,然后使用Reflector或SharpDevelop转换为C#。使用SharpDevelop转换时,需要注意一些事项。它会搞砸所有的数组引用并认为它们是函数调用,而所有逻辑运算符都会被转换为位逻辑运算符("And"变成"&"而不是"&&")。使用Reflector会丢失一堆东西。另外,Visual Studio转换器在许多大型项目上失败了,只是卡住了,永远也无法完成。
一旦你已经将代码转换为C#,你就需要开始真正的工作了。转换最多只能帮你完成50%的工作量,你必须修复很多问题(你会发现你的代码布满了待做标记),重构很多东西,最终你会得到代表你VB6的C#代码--除非你有非常好的VB6代码,否则你不会想呆在那里。此外,你的所有代码都将充斥着VB助手,而不是使用正确的DotNet函数(例如,所有的字符串函数都是助手而不是类对象)。如果你使用的是变体,它们都必须被重写。如果你使用了很多API调用,它们往往需要重新编写。
最终,你会得到一个基础版本,但转换一个大项目(20-30个窗体,30个类,30个模块)可能需要数个月时间。从头开始重写可能需要两倍的时间,并且你将失去所有的业务逻辑。因此,虽然可以做到(我已经在三到四个大型项目中这样做了),但没有万能药、没有银弹,任何声称可以独自完成的工具都是在说谎。

如果您的真正工作是在代码转换为C#后才开始,为什么不将其保留在VB.NET中呢?进行成本效益分析的人是否做出了明智的决策? - kjack
哦,如果你只是转换成VB.Net,那么有很多工作要做,但是如果你打算翻译成C#,那么在VB.Net中做这项工作是没有意义的。我们将一些项目从VB6移植到了VBNet,但是我们的开发人员在C#中更加高效。 - Kris Erickson

8

使用新版本的Visual Studio打开您的项目,将您的代码转换为VB.Net,然后下载.Net Reflector来帮助您进行C#转换。

祝您好运!


7
这个答案存在误导性,因为从VB6转换到.NET平台的过程中涉及到一些微妙和显而易见的行为变化。不要这样做。最好有一个系统的转换计划,把.NET视为一个独立的平台,而不依赖于任何转换工具。 - RS Conley
然而,我认为这是一个比仅仅拥有一个方法更好的方法... - sebagomez
2
祝你好运没错!对于任何非平凡的程序来说,用这种方法产生有用的东西的机会比中彩票还要小。 :) - Kevin Gale
1
.Net Reflector 转换 VBNet 到 C# 的效果不佳,转换过程中会创建很多标签和跳转语句等。使用语义转换器(例如 CSharpDeveloper 中的一个)会更好。 - Kris Erickson

8

Artinsoft(现已更名为Mobilize.Net)实现了这一点,具体来说是通过Visual Basic Upgrade Companion。但即使使用VBUC后,仍然有一些需要手动迁移/验证的系统部分。但通常情况下,这只是原始问题的一个较小集合。而且,由于过去的迁移经验,一些迁移问题已得到解决。

Artinsoft是与theraccoonbear帖子中提到的Visual Studio附带的向导相同的公司。但是,如果我没有弄错,该向导仅将VB6迁移到VB.Net。

完整披露:我为Artinsoft工作


Esteban,VBUC在文件上运行的次数有限制吗?我指的是您网站上的这个声明:“许可是针对应用程序的,允许在相同的VB6文件上多次运行VBUC。” - kjack
如果我没记错的话,你基本上会有时间限制(通常为1年),在此期间你可以无限次迁移。一旦真正进行执行,许可证本身是相当宽容的。在大多数情况下,ArtinSoft仅依赖于客户按照许可条款正确操作。 - Esteban Brenes
谢谢你提供的信息,Esteban。这听起来比我给出的报价好多了,我的报价暗示了一个相当严格的限制。 - kjack
Artinsoft现在提供了一个免费许可证,可以升级10,000行代码http://www.artinsoft.com/artinsoft-renews-its-efforts-to-ease-the-transition-from-microsoft-visual-basic-6-to-microsoft-net-framework.aspx - MarkJ
然而,还有另一项服务可将VB6代码转换为C#。SELISE Phoenix提供此服务(完全功能的转换代码)并向使用该服务的公司提供转换后的支持。https://phoenix.selise.ch/ - Md Ashaduzzaman

5
简短回答是VB6和VB.NET(以及因此C#)是不同但相关的语言。这两个平台之间存在许多细微差别(例如,整数Int16变为Int32),以及显著的差异(图形、表单和打印引擎)。您需要将其视为转换到完全不同的平台。

3

微软建议使用ArtinSoft的Visual Basic Upgrade Companion(VBUC)

微软和ArtinSoft合作向您提供免费的VBUC许可证。下面的折扣代码可用于购买一个许可证,该许可证将允许您免费将多达10,000行VB6代码迁移到VB.NET或C#应用程序。在购买更大的许可证时也可以使用。

它并不完美,生成的代码仍需要大量手动修复才能编译,但这个工具仍然值得一试。


3

第二个比第一个更好。 - sebagomez
2
这两个都不能将VB6代码转换 - bjan

2
有一个问题需要问自己,那就是拥有C#而不是VB.NET有多重要?如果你正在转换一个大型应用程序,也许你应该只升级到VB.NET,这将更便宜。
在VB6中有一些特性,在C#中没有完全相等的(如错误处理、后期绑定等)。问问自己,为什么值得花费手动转换的精力,当你可以使用支持它们的VB.NET呢?
如果你不相信我(也没有人投票支持我的答案,哭泣!),也许你会相信Francesco Balena和Dan Appleman(在书Moving to VB.NET中),他们同意我的看法。

1
在GreatMigrations,我们通过手工开发VB6 / COM编译器来实现这一点。该编译器读取VBP(或一组相关的VBPs)和引用的COM库,并构建“语义模型”。此模型是一组极其详细的符号表和操作码流,完整准确地描述源系统定义的所有信息结构和执行的所有操作。
然后,该工具应用一系列算法修改和重组模型,使其与.NET更兼容,并可选地应用自定义转换;例如将COM组件替换为.NET类。变换规则由人员设计并手动创建,以满足他们的独特需求。
最后,模型被“执行”,但我们不是分配数据模型并执行操作,而是使用目标平台的表示法编写文件结构、数据模型和操作。我们可以使用这种方法编写VB.NET和C#。我们还使用此过程将ASP站点迁移到ASPX,(我们还有一个多方言FORTRAN到C产品)。

这种方法在第一次尝试时不会生成可生产的软件,但可以通过修改工具的配置和重新运行翻译过程来改进并使其产生“更好”的软件。我们工具的优点是可重复性、速度和灵活性,从而促进了敏捷的工具辅助重写方法论。我认为,利用我们的方法进行迁移的团队将受益于将更多资源分配给评估重新设计和开发流程改进的替代方案,而不是重新收集功能要求、手工编码和测试。他们最终将享有一个更易维护的系统,在迁移后更忠实地复制原始应用程序功能,并在迁移期间拥有更大的控制和可见性。

我们的工具试用版可以在此处gmStudio Trail Request Download下载。它允许您尝试使用高达10K LOC的ASP/VB代码,并且可运行30个会话。


2
试用版提供的功能相当无用,而且很难看出这个产品是否对 VB6 门外汉转换者有任何价值... - Morten Bergfall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接