将VB.NET项目转换为C#项目

时间:2010-10-31 06:13:26

标签: c# vb.net

我正在寻找一个工具(付费或OSS)来将中型VB.NET项目转换为C#项目。我搜索过StackOverflow并找到了一些问题/答案,但大多数建议使用.NET Reflector或在线复制/粘贴单个文件工具。反射器似乎不符合要求,因为它将转换组件,但我们正在寻找一个整体销售项目转换器,它将维护项目,包括文件名,注释等。

我们完全愿意手动处理无法自动转换的项目,但我们希望从一个相当全面的转换项目开始。

我们发现的一个建议是Elegance Technologies的CSharpener for VB.NET - http://www.elegancetech.com/csvb/csvb.aspx。根据他们的网站,自VS 2008之前,它还没有加速。

建议将不胜感激。

5 个答案:

答案 0 :(得分:4)

SharpDevelop是一个开源IDE,它允许你在VB和C#之间进行转换。

答案 1 :(得分:4)

请注意,在VB.net中有一些可以很好地完成的事情,如果在C#中完全不能很好地完成(反之亦然)。两个注意事项:

  1. 在vb.net中,派生类中的声明初始化(例如“Dim Foo As Bar = Whatever”)在基本构造函数运行之后发生,并且可以引用正在构造的对象。在C#中,此类声明初始化在基本构造函数运行之前发生,并且不能引用正在构造的对象。有人可能会将所有这样的初始化移动到构造函数,但是如果有多个构造函数可能需要创建冗余代码。
  2. 在vb.net中,Catch语句可能包含一个条件(例如,当Ex.SomeProperty = 9时,Catch Ex As FancyException)。在C#中,实现类似结果的唯一方法是捕获异常,然后确定它是否符合必要的标准,如果没有,则重新抛出;这将以多种方式产生不同的语义。除此之外,在评估When子句时,将由异常触发的Finally语句尚未运行,因此允许捕获系统的状态。此外,如果设置了break-on-unhandled-exception,并且没有满足“When”条件,则调试器将在原始异常发生的位置处中断。如果异常被捕获并重新抛出,则调试器将在重新抛出时中断。

我认为IL-to-C#转换器可以将初始化移动到对象的构造函数中,但这会导致一些烦人的重复。我不认为C#代码有任何方法可以匹配VB.net异常处理的语义。

答案 2 :(得分:3)

两个字:程序员。 如果你想让它成为最无bug的,那就是雇佣程序员。 快速谷歌出现http://www.freelancer.com,你可以聘请一次性程序员。

答案 3 :(得分:2)

如果您对SharpDevelop不满意,TangibleSolutions将为他们的转换器提供支持,以确保您的幸福。

答案 4 :(得分:1)

SharpDevelop非常好,但在我的公司,我们发现VBConversions提供了更加完整的转换。这是一个商业应用程序,但是在SharpDevelop上保存的时间对我们来说是明智的。

作为一个具体的例子,我们发现SharpDevelop没有正确转换的一件事是VB索引,它使用曲线括号。它似乎无法区分索引和方法调用,因此没有将索引转换为方括号。 VBConversions转换它们很好。这一件事让我们值得购买。