泣きながらWindowsアプリケーションを移植した

「まれによくある」案件なのかも知れませんけど個人的に結構心に来たので書き留めておきたく。

社内のシステムを結構大がかりに入れ替えることになってウェブアプリケーションを中心に更新作業が発生しているのですけど、「前任者の忘れ形見」というか「いずれ踏む地雷」というか、割と業務に密着して利用されているWindowsアプリケーションがかなりの難敵であることが判明。概要はこんな感じ。

  • .NET Framework 1.1向け
  • 使用言語はC#
  • ソースはない
  • 開発環境もない(「Visual Studio .NET 2003」だと思う)
  • 仕様もない

でもって、特殊事情としては、

  • 僕にはC#での開発経験はない(「Hello, World!」でさえ怪しい)
  • 納期やばい

納期がやばいのは他の作業で時間を使いすぎた僕のせいなんですけどそれにしたってこの、プラスチック製果物ナイフでくじらを解体するような感覚に頭がクラクラしました。エンジニアの人ってすげえな。最近「俺、エンジニアじゃねーな…」と思う機会が多いので余計に。


結論を書くと、今のところ8割方動いてます。

  • .NET Framework 4 向け
  • 使用言語はC#
  • ソースはデコンパイルして再生成した
  • 開発環境は「Visual Studio 2010 Express」入れた
  • 仕様は今書いてる

誰かの助けになるとは思えませんが、一応気付いた点もメモ。



逆コンパイルにはReflector

「逆コンパイル」って聞いて直に「リバースエンジニアリング」に結び付いていたのですけど、逆コンパイルって別に違法じゃないのね。将来は解りませんが今のとこ。んで、この「Reflector」を使うと、コンパイル済みのアプリケーションからソースを生成出来て、かつプロジェクトファイルとしてエクスポート出来ると言う素敵さ。

.NET Reflector – Understand and debug any .NET code

有料版でははプラグインとか入れてVisual Studioと連携とかも出来るみたいなんですけど、よく分かんなかったのでエクスポートまでしました。無料試用版でもそこまでならできました。



コードの移植自体はそんなに難しくなかった

僕に能力があるわけじゃなくて、「Visual Studio」が優秀なおかげです。お節介とも言うのかもしれないけど、コンパイル(ビルド)して出てきた不具合を1つずつ直していったら動くようになった、という感じ。コンパイルというものには全く接点のないところを歩いてきたのですが(サーバにミドルウェアを入れるときくらいだけど最近は全部RPMで入るしなあ)、コンパイルって良いものだと思いました。素敵。

Visual Studio 2010 Express Products | Microsoft Visual Studio


とはいえ地味に必要になったこともいくつかあったので適当に列挙。


PublicKeyTokenを確認するには – uedakoの日記
C:\WINDOWS\assembly

Error message: LoaderLock was detected – Add-in Express .NET forum
結局無視した

CrystalReport.Net – Query Engine Error
「CrystalReport for Visual Studio 2010」版に上げてインストールしたら解決した

「タイプ初期化子が例外をスローしました」エラー何? | Visual BasicのQ&A【OKWave】
32bitアプリケーションを作っていたのに、環境に合わせて64bit版のCrystalReportを入れてたせいだった


解決してない問題

発行して、他のPCでインストールしようとすると、「log4netをGACに入れろ」って怒られる。log4net.dll自体はローカルコピーで持って行ってるので、そのためにGACを見に行くはずはないのだけど……他のPCでも検証してみる。



……ていうか、これからようやく改修。まだ先は長い。




最近読んでためになった本↓