如何将VB6代码转换为C#?

时间:2008-10-07 17:48:13

标签: c# vb6 porting vb6-migration

有没有人知道从VB6代码转换为C#的方法?

有没有可以为我做这个的工具?

10 个答案:

答案 0 :(得分:27)

VisualStudio提供(或至少提供)一个向导来执行从VB6到VB.NET的转换(然后可以通过一些工作将其转换为C#,可能由#develop的VB.NET< - > C#转换器),但是当我最后一次使用它时,对于任何非常重要的事情都需要做大量的手工工作,所以我怀疑如果这是一个大型和/或重要的应用程序,你可能会更好地手写重写或移植

答案 1 :(得分:12)

它可能会有点厚颜无耻,但你的大脑可能是最好的工具。 值得重写。

也许你不需要移植它。 VB6可以变成COM组件吗? 通往COM的港口,来自C#的电话,及时为Judy法官回家。

答案 2 :(得分:10)

作为一个多次这样做过的人,这不是一个简单的过程。您可以使用this answer中所述的VB6到VB.Net工具,然后使用Reflector或SharpDevelop转换为C#。随着SharpDevelop的转换,一些警告。它搞砸了所有数组引用并认为它们是函数调用,并且所有逻辑运算符都转换为按位逻辑运算符(并且变为& not&&&)。使用Reflector,你会丢失很多东西。此外,Visual Studio转换器在许多大型项目上失败,只是挂起并且永远不会完成。

将代码转换为C#后,您必须开始真正的工作。转换最多只能获得50%的转换,你必须修复大量的东西(你会看到你的代码乱丢TODO),重构大量的东西,最后你留下了C#,这是一个你的VB6的代表 - 除非你有非常好的VB6代码,不是你真正想要的地方。你的所有代码都充斥着VB助手,而不是使用正确的DotNet函数(所有字符串函数都是辅助函数而不是类对象,例如0。如果你使用了Variants,那么所有这些都必须被重写。如果你使用了很多API调用,他们往往需要重写。

最终你将获得一个基础,但转换一个大型项目(20-30个表格,30个班级,30个模块)可能需要几个月的时间。但是,从头开始重写可能需要两倍的时间,而且会丢失所有业务逻辑。所以,它可以完成(我已经完成了3或4个大型项目),但没有灵丹妙药,没有灵丹胆,而且任何工具都说它会独自为你做这件事,是在撒谎。

答案 3 :(得分:8)

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

祝你好运!

答案 4 :(得分:8)

Artinsoft(现已重命名为Mobilize.Net)就是这样,特别是Visual Basic Upgrade Companion

然而,即使在使用VBUC之后,仍然需要手动迁移/校对系统的某些部分。但它通常是原始问题的一小部分。由于过去迁移的经验,一些迁移​​问题已得到解决。

Artinsoft与构建Visual Studio附带的向导的公司是同一家公司,在theraccoonbear的帖子中提到过。但是,如果我没有错,那么向导只会将VB6迁移到VB.Net。

完全披露:我为Artinsoft工作

答案 5 :(得分:4)

简短的回答是VB6和VB.NET(以及C#)是单独的语言,但是相关的语言。在两个平台之间有许多微妙的(Integer是Int32而不是Int16)和粗略的差异(图形,表格和打印引擎)。您需要将此视为转换为完全不同的平台。

这里更充分地探讨了这些问题

How to Switch a Large App from VB6 to VB.NET

答案 6 :(得分:3)

答案 7 :(得分:3)

Microsoft建议ArtinSoft’s Visual Basic Upgrade Companion (VBUC)

  

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

它并不完美,导致代码仍然需要大量的手动修复,直到它甚至编译,但仍然这个工具值得一试。

答案 8 :(得分:2)

要问自己的一个问题是,拥有C#而不是VB.NET有多重要?如果您要转换大型应用程序,也许您应该升级到VB.NET,这将更便宜。

VB6中有一些功能在C#中没有完全相同的功能(错误处理,后期绑定等)。问问自己为什么值得手动转换那些,当你可以去支持它们的VB.NET。

如果你不相信我(没有人投票支持我的答案,呜咽呜咽!)也许你会相信Francesco Balena和Dan Appleman(在书中Moving to VB.NET)同意跟我一起。

答案 9 :(得分:1)

在GreatMigrations,我们手工完成 - 我们用手开发VB6 / COM编译器。编译器读取VBP(或一组相关的VBP)并引用COM库并构造“语义模型”。此模型是一组非常详细的符号表和操作码流,可完整准确地描述源系统定义的所有信息结构和操作。

然后,该工具应用一系列算法来修改和重构模型,使其与.NET更兼容,并可选择应用自定义转换;例如,用.NET类替换COM组件。转换规则由人们设计并“手工”创建,以满足他们的独特要求。

最后,模型被“执行”,但我们不是分配数据模型和执行操作,而是以目标平台的符号编写文件结构,数据模型和操作。我们可以使用这种方法编写VB.NET和C#。我们也使用这个过程将ASP站点迁移到ASPX,(我们还有一个多方言FORTRAN-to-C产品)

该方法在第一次尝试时不会生成生产就绪的软件,但可以通过修改工具的配置和重新运行翻译过程来改进和制作“更好”的软件。我们的工具的优势在于其可重复性,速度和灵活性,这有助于灵活的工具辅助重写方法。 IMO,利用我们的方法的迁移团队将受益于分配更多资源来评估重新设计和开发过程改进的替代方案,而不是重新收集功能需求,手工编码和测试。他们最终将享有更易于维护的系统,并在迁移后更加忠实地再现原始应用程序功能,并在迁移过程中提供更好的控制和可见性。

我们的工具试用版可在gmStudio Trail Request Download找到。它允许您尝试最高10K LOC的ASP / VB代码并运行多达30个会话。