2008-12-02 22 views
9

有没有用于将VB.NET winforms应用程序移植到C#的任何“良好”资源?我确信有一些软件只是翻译代码,但我希望在同一时间重构代码。保持它目前的形式是有问题的,因为它使用了VB.NET允许的一些“不好的设计”实践,并且会使未来的维护更加复杂。这里有没有人经历过这个过程,你是怎么做到的?你使用翻译/重构方法吗?您是否只是使用最终产品来重新创建功能,而无需查看大部分代码库的当前代码库?你会(共同)推荐什么?将VB.NET Winforms应用程序移植到C#

更新

当我告诉Grauenwolf,保持在其当前的语言提出了以下问题:

  • 不能够很容易地添加功能。 VB.NET不是一门我非常喜欢的语言。我非常欣赏学习语言的讽刺意味,但是将来的维护需要考虑到不懂VB.NET的人。其他应用程序已移植到C#(很久以前,事实上);我们想要添加的所有功能都取决于应用程序的分离(现在它非常紧密地耦合在一起)。我的选择是用我不太熟悉的语言重构它,或者用我理解的语言来重构它。

为了任何人谁投赞成票的问题了,我真的不知道为什么做;关心的不是我是否应该把它留在VB.NET中;关注的是现在不移植它的未来成本是多少。如果我在修复它时花费很大的代价,为什么不去额外的步骤,并为未来的程序员维护?

作者注:我没有看在年龄这个问题,有一个最近的回应,让我感动我的“答案”到这个问题,并删除了“答案”(因为它是不是一个真正的回答)。

回答

16

根据我的经验与一些大型应用程序混合使用VB和C#项目,我建议将它留在VB.NET中。如果设计出现问题,请修复它们,但将整个事情转换为C#听起来像是一种凌乱的,不必要的分心。

这两种语言之间的非文体差异非常小,因此很难看到强制转换的功能需求。 (在Visual Studio 2003中有一个旧的bug,排除了某些特定的项目引用链,它们以特定的方式混合了C#和VB项目,但这是我遇到的唯一一个实际障碍。)

Individual开发人员肯定倾向于倾向于某种风格偏好,但完全转换是需要做大量工作才能体现不同口味的语法糖的。

+0

我在下面的问题的答案中发布了更多信息。此外,我不知道这是否与此相关,但任何时候,如果我单击我们编写的C#组件(位于同一解决方案中的另一个项目内部)中的“转到定义”,它会拉起对象浏览器而不是定义。 – 2008-12-03 12:53:52

6

如果您使用类似Reflector或Anakrino的东西,它的输出基于IL而不是原始源。无论它是否产生更好的代码,都可以进行辩论......但无论如何,你可以尝试一下。 :)

+0

我同意 - 反编译为C#然后重构结果,根本不需要翻译它。 – 2008-12-02 20:36:30

+0

最新版本的Reflector可以让您针对不同版本的框架和几种不同语言“优化”反编译器。很酷。 – GalacticCowboy 2008-12-02 21:11:50

1

我已经使用C-Sharpener在我们的一些应用程序上进行了转换,但它并不完美。它转换了大约95%的代码,并且在我手动修复剩下的5%时我最终重构了代码。

2

在我的工作中,我们使用了developerfusion的翻译器,但没有自动执行(只需翻译一段代码或类,然后手动将结果粘贴到C#项目中)。

反射器是一个很好的工具,但在阅读lambda函数时可以发现一些问题。

对于重构,我们尝试过的最好的工具是Refactor Pro

3

保持它的当前形式是有问题的,因为它使用了VB.NET允许的一些'坏设计'实践,并且会使未来的维护更加复杂。

你认为C#不允许坏设计?

问题不在于VB,问题在于编写它的人和拒绝修复它的人。所以退后一步,深呼吸,然后开始修复代码。谁知道,你可能会发现这些“糟糕的设计实践”中的一些实际上很有意义。

1

我在VB.NET上有2年左右的经验,但现在我只在日常开发中使用C#。在我尝试使用VB.Net to C#将我的VB.NET代码转换为C#之前,我从它和书中学到了东西。

0

哇!我是抓住这些东西的最后一个人。我在WinForms中有一个非常大的VB.NET代码,并且已经被分配到端口号为C#WinForms。 我有VB 0知识,但必须完成任务。我用T elerik Online Code Converter将所有的VB业务逻辑转换成C#。 该转换器是一个愚蠢的,我提出了大约5000 erros主要混淆了[](),ref参数和线程的问题以及什么不是。 编译器(VS 2013)甚至无法找出单个构建中的所有错误。我必须花费2个月的时间来修复这些错误并一次又一次地构建项目。 我将WinForms UI复制到C#Winforms UI - 这不是什么大问题,现在我已经同时调试了两个代码以查看输出。

我想告诉它,现在4个月了,我仍然在完成这个项目。 我的经验很差劲,不想推荐任何人。