我遇到了需要将C#转换为VB.NET项目的情况。 (我想自动化这个,所以我不能使用在线工具或类似的东西)
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());
}
由于调用convert方法时没有异常,我假设该方法返回一个有效的SyntaxNode,并且SyntaxNode.ToFullString()方法或编码问题弄乱了换行符等。
之前是否有人遇到此问题并找到解决方案?
答案 0 :(得分:2)
我7年前在VB.NET中开发了一个应用程序,我不得不将一个组件集成到其中,其SDK仅用C#编写。我必须整合的应用程序是相当大的amd复杂。我使用这个产品将C#转换为VB.NET,虽然成品确实需要一些调整和一些彻底的测试,但我不记得这个过程特别令人痛苦。结果非常好。该应用程序运行良好,今天仍然很强劲。
http://www.tangiblesoftwaresolutions.com/Product_Details/Instant_VB.html
答案 1 :(得分:2)
仅供参考,现在有一个用于Visual Studio 2015.2 +的Roslyn Code Converter加载项:
https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.CodeConverter
答案 2 :(得分:1)
SharpDevelop有一个菜单为整个项目进行转换。您可以自动化它与GUI交互(模拟鼠标点击),或者,因为它是开源的,您可以找到调用的方法进行转换,并使用您可以添加并传递给SharpDevelop的特殊命令行参数自动调用。 P.S.-这就是developerfusion进行转换的方式(你可以在“已知问题”中看到#develop的明确引用)。
答案 3 :(得分:0)
我使用在线工具http://www.developerfusion.com/tools/convert/csharp-to-vb/ 这似乎处理整个类没有错误。
答案 4 :(得分: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