繁体   English   中英

Roslyn:将C#转换为VB

[英]Roslyn: Convert C# to VB

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

一个“粘贴为C#/ VB”样本视觉工作室扩展 ,似乎能够做到这一点。

我试过转换这个类:

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());
}

由于调用convert方法时没有异常,我假设该方法返回一个有效的SyntaxNode,并且SyntaxNode.ToFullString()方法或编码问题弄乱了换行符等。

有没有人以前遇到过这个问题并找到解决方案?

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

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

仅供参考,Visual Studio 2015.2+现在有一个Roslyn Code Converter加载项:

https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.CodeConverter

网络版本在这里 ,回购在这里

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

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

你不编译到VB。 .NET Framework使用的语言编译为CIL代码 ,您可以将其反编译为VB.NET。 结果会很难看。

而是使用转换工具 你的示例代码给了我这个:

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

        End Sub
    End Class
End Namespace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM