実行ファイルにリソースとしてソースファイルを圧縮格納する方法
ソフトウェアの開発・保守にて、プログラムソースの管理をどんなにしっかり行っていても、実行モジュールに対応したソースがどれだかわからない。あるいはソースコードが行方不明になるという事故が発生することがあります。
今回は VisualStudio2005、2008 を使って実行ファイル(.exe、.dll)にソースファイルを含めてしまうことで、実行ファイルとソースの等価性を確実に保証し、実行ファイルから完全なソースコードを復元できるようにする方法を紹介したいと思います。
あらかじめコマンドラインから呼び出せるフリーのアーカイバである7-zipをインストールしておく必要があります。
VisualStudioより、ダミーの「src.zip」をプロジェクトに追加し、ビルドアクションを「埋め込まれたリソース」にします。
VB.NETの場合だと、プロジェクトのプロパティ⇒コンパイル⇒ビルドイベントより
(※ VB.NET Express Editionではビルドイベントの設定はできません。C# Express Editionでは設定可能。)
[ビルド前に実行するコマンドライン]
DEL "$(SolutionDir)src.zip""C:\Program Files\7-Zip\7z.exe" a -tzip "$(SolutionDir)src.zip" "$(SolutionDir)" -x!src.zip -x!obj -x!bin -r
[ビルド後に実行するコマンドライン]
type nul > "$(SolutionDir)src.zip"
をそれぞれセットします。
また、プロジェクトを作成・保存する際には、「ソリューションのディレクトリを作成」チェックボックスを外しておきます。
(※チェックを付けたくない場合、ビルドイベントの$(SolutionDir)を$(ProjectDir)としてやる必要があります。)
以上の手順で、ビルドする際に自動的にソースフォルダが圧縮され、リソースとして実行モジュール(.NETアセンブリ)に格納されることになります。
実行モジュールから簡単にソースファイルを取り出すには.NET Reflector等を利用すると良いでしょう。