DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

C#のコードをVB.NETへ変換する、VB.NETのコードをC#へ変換する

ここでは、C#のコードをVB.NETのコードに変換してくれるツールや、逆にVB.NETのコードをC#のコードに変換してくれるツールを紹介します。また、それ以外の言語の変換に便利なツールも紹介します。ここでは無料で使用できるものだけを紹介します。

オンラインのサービス

Developer Fusion

Developer FusionCode Convertersで、コード変換ツールが利用できます。Web上で変換できます。

変換できる言語は、2015/6/15の時点で、変換元がC#とVB.NET、変換先がC#、VB.NET、Python、Rubyです。

SharpDevelopを基に作成されているということです。

code converter by SharpDevelop

Snippet Converter」は、SharpDevelopが提供しているサービスです。変換できる言語は、2015/6/15の時点で、変換元がC#、VB.NET、変換先がC#、VB.NET、Python、Ruby、Booです。

Webサービス「ConvertService Web Service」もあります。Webサービスを利用したWindowsアプリケーションとそのソースコードが「Windows Forms Web Service Client」にあります。

その他のサービス

オフラインツール

SharpDevelop

オープンソース(GPL)の.NET開発環境であるSharpDevelopを使ってコード変換を行うこともできます。

変換できる言語は、バージョン4.4では、変換元がC#、VB.NET、変換先がC#、VB.NET、Python、Ruby、Booです。

メニューの[Project]-[Convert]で、現在開いているプロジェクト全体をコード変換できます。また、メニュー[Tools]-[Convert code to]で、現在開いているファイルをコード変換できます。

補足:C#からVB.NETへの変換は、Ver.0.96から付いた「C# to VB.NET converter」という機能で、VB.NETからC#への変換は、#develop Fidalgo Beta 1から付いた「VB.NET to C# converter」という機能でできます。

その他のツール

  • GBVB - Converting VB.NET code to C#
    ダウンロードして使うツールです。VB.NETをC#に変換します。ソースコードも公開されています。私が試した限りでは、今のところは、かなり簡単なコードしか、まともに変換してくれませんでした。また、日本語は文字化けします。
  • Econ NetVert
    C#からVB.NET、VB.NETからC#の変換に対応しています。
  • A Visual Studio Add-In That Converts C# Code To Visual Basic
    Visual Studioのアドインで、C#からVB.NETの変換ができます。「Convert C# to VB .NET - Kamal Patel」や「Free Code Translation for .NET (C#<->VB.NET)」を使って変換しているようです。
  • Convert .NET - A multipurpose conversion and developer tool
    C#からVB.NET、VB.NETからC#の変換ができるようです。

逆アセンブラを使用したコード変換

いままで紹介したようなサービスやツールを使わずに、コードを変換する奥の手を紹介しましょう。それは、MSILのDisassembler(逆アセンブラ)を使う方法です。

Reflector for .NET

注意:Reflector for .NETは、バージョン7から有料化されました。

Disassemblerは.NET Framework SDKにも「MSIL Disassembler」(Ildasm.exe)というのが付いておりそこそこ使えますが、C#やVB.NETのコードを得ることが目的であれば、「Reflector for .NET」というツールがお勧めです。使い方としては、変換元のコードをビルドし、できたファイル(exeやdll)をReflector for .NETで開き、メニューの[Tool]-[Disassembler]を選択します。これで左側のツリーで選択したメソッドのコードが右側に表示されるようになります。

表示するコードの言語を変更は、ツールバーのコンボボックスでできます(または、メニューの[View]-[Options]で「Options」ダイアログを表示し、「Language」を変更します)。指定できる言語は、バージョン6.8では、IL、C#、Visual Basic(VB.NET)、Delph、MC++、Oxygene、F#です。

ILSpy

Reflector for .NETの有料化をきっかけに、dotPeekCodeReflectJustDecompileなど多くの無料のDisassemblerが登場しました。その一つが「ILSpy」です。ILSpyはSharpDevelopのチームが開発しており、オープンソース(MITライセンス)で配布されています。

コードの表示は、バージョン2.3では、C#、VB.NET、ILの選択が可能です。

終了したサービス

以下に紹介するものは、すでに終了してしまったサービスや、ダウンロードできなくなってしまったツールです。

C# to VB.NET Translator - AspAlliance

「C# to VB.NET Translator」はWeb上で提供されているサービスで、C#からVB.NETへの変換に対応しています。このページのテキストボックス(「Paste C# code below:」と書かれている下)にC#のコードを入力し、「Translate」ボタンをクリックすると、VB.NETのコードに変換されます。

.NET Framework 2.0以上には対応していませんが、1.1以下であれば、かなり役に立ちます。

「C# to VB.NET Translator」を使用するに当たり、注意すべき点を幾つか紹介します。

  • 配列の大きさを指定して初期化するコードは正しく変換されません(例:「int[] i = new int [10] {};」は「Dim i(10) As Integer」と変換されます)。
  • 条件式の「&&」や「||」は、「And」「Or」と変換されます。正しくは、「AndAlso」「OrElse」です。
  • 条件式が多少複雑になると、間違えて変換することもあります。
  • 文字列リテラルで@を使っている時にエラーが出ます。@をとり、""内の\もとってから変換した方が良いでしょう。
  • try...catch...finally文で、catch文とfinally文の中身が削除されてしまうことがあります。

Convert C# to VB .NET - Kamal Patel

C#からVB.NETへコード変換するツールとしてかつて有名だったのが、「Convert C# to VB .NET」です。Web上での変換以外に、「Convert C# TO VB .NET OFFLINE」という実行ファイル形式のツールもあり、とても便利です。さらにこの「Convert C# TO VB .NET OFFLINE」はソースが付いているため、改造も出来ます。

「Convert C# to VB .NET」は、他のツールと比べ、正しく変換できないケースが非常に多いです。また、";"の前で改行されている(文の途中で改行されている)コードではエラーが発生することが多いようです。たとえ、エラーが発生しなくても、文の途中で改行されているコードは正しく変換されないことが非常に多いため、「Convert C# to VB .NET」を使用する際は文の途中で改行していないコードを入力することをお勧めします。

「Convert C# TO VB .NET OFFLINE」で日本語(Shift JIS)を正しく表示できるようにする方法を紹介しておきます。ソースコードのForm1のtxtCSharpとtxtVBのFontを日本語フォントに変更し、FileToStrメソッド内の

StreamReader oReader = System.IO.File.OpenText(cFileName);

StreamReader oReader = new StreamReader(cFileName, System.Text.Encoding.GetEncoding(932));

と変更すれば、大丈夫みたいです。

その他

  • BabbelFisken
    ダウンロードして使うツールです。VB.NETからC#への変換の他に、Delphi、Turbo Pascal 5、VB6、VB6(No Option Explicit)からC#への変換もサポートしています。日本語も文字化けすることがありませんし、ソースコードも公開されています。精度はそこそこです。
  • Anakrino
    Reflector for .NETと同じくらい(あるいはそれ以上)昔からあるDisassemblerです。Anakrinoに同梱されているExemplar.exeを使うと、EXEやDLLの内容を、いっぺんにC#のコードへ変換することができます。ただし残念なことに、日本語が表示されません(Exemplar.exeは途中で終わってしまいます)。
  • 履歴:
  • 2007/1/11 「Visual C# to Visual Basic .NET Converter」(http://csharpconverter.claritycon.com/Default.aspx)をリンク切れのため、削除。ツールをいくつか追加。
  • 2008/9/10 「Convert C# to VB .NET」をリンク切れのため削除。新たなツールを追加など。
  • 2015/6/15 情報を更新。ILSpyを追加など。