-
Notifications
You must be signed in to change notification settings - Fork 0
MS_VB6ToVBNETConversion
- 戻る(VB 6.0 > VB.NET、各種、技術毎の移行性)
- VB6.0からVB(.NET)へのコンバージョン
- VB ⇔ C Sharp 変換
- 移行見積もりの概要
本ページでは、VB 6.0からVB.NETへの
コンバージョン(手修正有りのコンバージョン移行)の作業範囲を扱います。
.NET が登場した 2003年当時、ベンダ提供のものもいくつか開発されましたが、
現在は軒並みサポート切れで、
Visual Basic 2008 でコンバージョンするのが主流になっています。
以下の様な手順でコンバージョンが可能です。
- VB6 がインストールされた環境に、Visual Basic 2008 Express をインストールする
- Visual Basic 2008 Express で対象の VB6 プロジェクトを開き、コンバートする
- 最新の Visual Studioでコンバートしたプロジェクトを開く
- コンバーターが自動で付加した、エラー、警告、情報のコメントをみて、対処を行う
- コンパイルエラー、警告を確認しながら、エラー対策を行う
補足(この手順が成立する理由と限界): アップグレード ウィザードは
Visual Studio 2008 が最後で、VS2010 以降には搭載されていない。
このため「わざわざ VB2008 Express を入れて 1 回通す」という
遠回りの手順になっている。ただし、VS2008 Express の入手は年々難しくなっている
(公式ダウンロードが整理された)。
現在の選択肢を整理すると次のとおり。
方針 内容 VS2008 でウィザード 従来手順。環境の入手が課題 商用ツール Mobilize.Net VBUC など。C# / .NET 8 への直接変換も可 手作業で書き直し 規模が小さい場合はこれが最短のことも多い 据え置く VB6 ランタイムは Windows 11 でもサポート対象(アプリのサポートは別) なお、VB6 ランタイム自体は Windows と同じライフサイクルで
サポートが継続している(IDE のサポートは 2008年に終了)。
「明日動かなくなる」という性質の話ではない点は、
移行判断の前提として押さえておきたい。
先ず、前提として、
- 移行性評価作業の作業内容中の、
- プログラムの移行性評価作業を
確認して下さい。コレを踏まえると、
VB 6.0の開発環境は既に 2008年をもってサポートを終了しており、
VB.NETへの移行が求められてきています。しかしながら、
コンバージョンによる VB 6.0 → VB.NET移行は、
実際には容易ではありません。例えば、VB 6.0で使用する
3rd パーティ製ライブラリ利用部分がコンバージョン ツールでサポートされない
等々に起因する修正範囲拡大の可能性が
VB 6.0 → VB.NETコンバージョンにはあります。
特に VB 6.0は GUI アプリケーション開発に利用されてきたため、
上記 3rd パーティ製 GUI コンポーネントの多用によって、
コンバージョンの修正範囲が拡大するケースが多い事が
過去事例からも判明しています。このような「手修正有りのコンバージョン移行」の
場合は、新規開発時と同程度のテスト工数に加え、ポーティング工数が必要になり、
トータルで VB.NETでの新規開発以上の工数が
必要となるようなケースも考えられます。
となることがあるため、以降の準備作業として、
- 移行性評価作業を実施したり、
- ベンダ提供のツールなどを使用してコードの変換率を調査
する必要があります。
-
3rd パーティ製ライブラリを使用している場合、
移行先に同じ I/F をサポートするライブラリが存在しているか?
などにも注意して下さい。 -
以前は、某社提供のコードの変換率の調査ツールなども存在していましたが、
現在は、サポート切れとなっています。
補足(何が自動変換できないのか): 「容易ではない」の中身を
具体化しておくと、見積もりの精度が上がる。
領域 変換可否 構文・制御構造 概ね自動( Dim/If/Forなど)標準コントロール 概ね自動( Microsoft.VisualBasic.Compatibility経由)3rd パーティ ActiveX / OCX 不可。代替品の選定と作り直しが要る Variant型・遅延バインディング半自動。実行時に初めて壊れる箇所が残る Control配列不可(.NET に概念が無い)。書き直し 既定プロパティ( Text1 = "a")半自動。曖昧な箇所は手修正 Err/On Error Goto動くが、例外処理への書き換えが望ましい COM相互運用 自動(RCW 経由)だが、64bit対応の制約を受ける とくに
Microsoft.VisualBasic.Compatibility名前空間は
.NET Core 以降に移植されていない点に注意が要る。
ウィザードが生成するコードはこれに依存するため、
「VB6 → VB.NET (.NET Framework) → .NET 8」という 2 段階では、
2 段目で再度の手直しが必要になる。規模によっては、VB6 → C# を直接狙う(商用ツールまたは書き直し)方が
総工数が小さいこともある。VB ⇔ C Sharp 変換も
併せて参照されたい。
- VB6の保守(
MS_VB6Maintenance.md) - VB6→VB.NET移行 FAQ(
MS_VB6ToVBNETFAQ.md)
- Visual Basic 6.0 リソース センター(サポート ステートメント)
https://learn.microsoft.com/previous-versions/visualstudio/visual-basic-6/visual-basic-6-support-policy
-
VB6からVB.NETへの変換について
https://qiita.com/tfukumori/items/9eab7be817eb16992c36 -
VB6.0から.NETへマイグレーションについて
https://qiita.com/onetechnologycompany/items/413715d75ddfca8e88c1 -
2023年のこのご時世に「Visual Studio 2008 Express Edition」をインストールする
https://qiita.com/sudare222/items/52e3e8cfed3256a452ce
Tags: 移行, .NET開発, Visual Basic
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。