#概要
VB.Net のソースを、C# に移行するを社内で実施中です。
ようやくやり方がまとまってきたので久しぶりに書いてみました。
さて、過去の記事だったり、日本語の記事ではほとんど SharpDevelop を使った方法の紹介がほとんどでしたが、ちょっと前に有償ツールですが、Instant C# というツール($149)を見つけました。
今まで使用していた、Sharp Develop よりはるかに精度が高い。多少は手で直さないといけないですが、SharpDevelop に比べると数倍は精度が高い。
画面はこんな感じ。
移行元プロジェクトのプロジェクトか、ソリューションを選んで出力先フォルダを選んでコンバートするだけ。
画面の右側に、プロジェクトごとに結果の概要が表示される。
ここでは、note, warning, ToDo の3種類の個数がされます。
これらのコメントはINSTANT C#
という文言で検索するとその箇所が分かりますが、これらは違和感のある変換をしているとはいえ、ちゃんと変換してくれてるので、無視してもほとんど問題なし。これを追うよりも、ツールが追えていないないエラーの方が大変です。
ただ、これらも Visual Studio で開いてエラーをつぶしていけばオーケーです。
#個人的なオススメ使用法。
- 一度ツールを当てる。
- Visual Studio で開いてエラーを見る。
- 元のソースで直した方がよさそうなところを直しておく。
- 必要に応じで、1~3を繰り返す。
- Visual Studio でエラーつぶす。
1~4であらかたつぶしておくと、慣れてくると5の作業は1日で1万行ぐらいできるイメージ。
#事前にやっておいた方がいいこと
-
このツールでは、ソースが Shift-JIS だと文字化けするので事前に UTF-8 に変換しておいた方がいいです。昔の Visual Studio でなければ大丈夫ですが。こちらに上げておきました。
-
メソッドに「()」を付けておいた方がいい。特に、ToString はかっこを付けてないことが多かったので、正規表現で一括で置換しました。こんな感じ。元
.ToString([^(]|$)
、後.ToString()$1
。よくある関数はこんな感じで一括で変換するコードを書いた方が楽かも。
not good: x.ToString
good: x.ToString()
#主なひっかかりどころ
c# に慣れてる人には当たり前かもしれないけど、主な移行作業。
- しばしばデリゲートでエラーになるので、
new Action(
で囲む。 - 配列のインデックス参照の "[","]" が普通のカッコのままなのを直す。
-
Enum
とint
の変換にキャストが必要になる。これを使っていると案外面倒。 - VB.Net でいうと、Char と String のキャストも自動でなくなるので、キャストが必要。
"a"c == "a"
みたいなのがエラーになっちゃう。 - (たぶん)C# では、
System.IO.File
を参照するのにusing System;
ってしても、IO.File
で参照できなくて、System.IO.File
と書かないといけない。 - ほかにもいろいろありますが、SharpDevelop で、VB.Net を C# に変換してみた( その1 )で書いていたのはほとんど、ツールが解決してくれてありがたい。
- SharpDevelop で、VB.Net を C# に変換してみた( その2 )で書いていたのもけっこう変換してくれる。
#C#に移行して
いろいろ手がかかって面倒でしたが、すでに数十個のプロジェクトを VB.Net から C# に移行しました。慣れてくるとだいぶ早く変換できるようになってきます。
グローバル関数も、using static Class1.Module1;
って書いてあげればC#でも使えたのでだいぶよくなってきました。
やっぱり、有償ツールはいいですねって感じ。