実行ファイルにリソースとしてソースファイルを圧縮格納する方法

ソフトウェアの開発・保守にて、プログラムソースの管理をどんなにしっかり行っていても、実行モジュールに対応したソースがどれだかわからない。あるいはソースコードが行方不明になるという事故が発生することがあります。

今回は 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等を利用すると良いでしょう。