2014-05-15 92 views
4

我有这种情况,我需要将C#转换为VB.NET项目。 (我想自动化,所以我不能使用在线工具或类似的东西)Roslyn:将C#转换为VB

a "Paste as C#/VB" sample visual studio extension似乎能够做到这一点。

我试图将这个类:

namespace TestApplication 
{ 
    class Class1 
    { 
     /// <summary> 
     /// Lorem 
     /// </summary> 
     public void Lorem() 
     { 

     } 
    } 
} 

但它结束了与此:

Namespace TestApplication 

    Class Class1 

     ''' <summary> Lorem </summary>  Public Sub Lorem() 
     End Sub 
    End Class 
End Namespace 

时提供的XML文档注释继承其他时候它不只是发生,但有时也类等

下面是处理样本转换的代码:

csharpToVisualBasicConverter.Convert返回一个SyntaxNode实例。

private void PasteAsVB() 
{ 
    var csharpCode = Clipboard.GetText(TextDataFormat.Text); 

    var tree = CS.SyntaxTree.ParseText(csharpCode); 
    var visualBasicCode = csharpToVisualBasicConverter.Convert(tree); 

    var start = wpfTextView.Selection.SelectedSpans.Min(s => s.Start).Position; 
    var end = wpfTextView.Selection.SelectedSpans.Max(s => s.End).Position; 
    var span = Span.FromBounds(start, end); 

    wpfTextView.TextBuffer.Replace(span, visualBasicCode.ToFullString()); 
} 

由于没有异常调用转换方法时,我假定该方法返回一个有效SyntaxNode和SyntaxNode.ToFullString()方法或编码问题搅乱换行等

难道任何人都遇到过这个问题,并找到解决方案?

回答

2

我7年前在VB.NET开发的应用程序,我不得不一个组件集成到它,其SDK是写在只有C#。我必须整合的应用程序相当庞大而且复杂。我使用这个产品将C#转换为VB.NET,虽然成品需要一些调整和一些彻底的测试,但我不记得这个过程特别令人痛心。结果非常好。该应用程序运行良好,今天仍然强劲。

http://www.tangiblesoftwaresolutions.com/Product_Details/Instant_VB.html

+0

由于可能没有彻底解决我的问题,因为该产品看起来像最坚实的一个,标志着我这是公认的答案。 – Leo

+0

我也用自己的即时C#产品走另一条路(VB.NET => C#),并能转换一个沉重的解决方案,无需任何显著的问题。这是早在2007年,但我肯定会去给他们一个镜头,如果我不得不做一遍。 –

+1

这不转换剃刀代码(.cshtml到.vbhtml),反之亦然。 –

0

我使用在线工具http://www.developerfusion.com/tools/convert/csharp-to-vb/ 这似乎处理整个类没有错误。

+0

我知道这个工具,但我不能使用它,因为我必须自动化该过程(使用我自己的visual studio扩展),所以我需要通过代码来完成。如果您了解任何(工作)备选方案,请告诉我。 – Leo

+0

另外请注意,这个转换器充满了错误... – sloth

+0

我在过去注意到错误,但最近我还没有遇到任何错误。 – Ozoid

0

您不会编译为VB。 .NET Framework使用的语言编译为CIL code,您可以将其反编译为VB.NET。结果将是丑陋的。使用conversion tool。示例代码给了我这个:

Namespace TestApplication 
    Class Class1 
     ''' <summary> 
     ''' Lorem 
     ''' </summary> 
     Public Sub Lorem() 

     End Sub 
    End Class 
End Namespace 
+0

Roslyn能够将C#代码解析为节点树,我使用的扩展将代码转换为VB(请参阅CSharpToVisualBasicConverter/Converting下的类)。 我刚刚回答了史蒂夫劳伦斯为什么我不能使用你发布的工具。 – Leo

+1

我发布的工具说它基于[#develop编辑器](http://www.icsharpcode.net/OpenSource/SD/)。也许你应该看看他们是如何做到的。顺便说一句,你原来的问题说:“我有这种情况,我需要将C#转换为VB.NET项目。”这听起来像是一次性交易。您没有提到需要从扩展程序作为要求来执行此操作。让**确保**你在你的问题中提供了足够的细节,所以你不会浪费人们的时间。 – mason

+0

谢谢,我会检查出来。 我在这个问题中增加了要求,我只是没有想到提到不同工具的答案,因为我特别提到了Roslyn。 – Leo

1

的SharpDevelop有一个菜单做对整个项目的转换。您可以自动与GUI进行交互(模拟鼠标点击),或者由于它是开源的,您可以找到调用的方法来执行转换,并使用可以添加并传递给SharpDevelop的特殊命令行参数自动调用。 P.S.-这就是developerfusion进行转换的方式(您可以在“已知问题”中看到#develop的明确参考)。