UnityでMono.Cecilの使う時の勘所
Mono.Cecilとは?
Mono.Cecilとは、.NETのCIL(共通中間言語)を操作するためのライブラリです。 .NETのDLLやexeを、生成したり改変したりすることが可能になります。
何に使うの?
主に
- アスペクト指向言語の実装
- コードの最適化
- コードの難読化
- リフレクションを使っている部分を置き換えて高速化
Unityで使うときのはまりどころ
実機上(iPhoneやandroid)ではMono.Cecilは使えません
この辺は、.NET2.0subsetで動かすことになると思いますので、CILをいじるためのクラスをつかうMono.Cecilは使えません。 なので、基本はMono.CecilはEditorディレクトリ内にいれて、Editor上でのみで使用することになります。 iPhoneの場合は、AOTの為原理的に使用不可能です。 androidはJITなので、もしかしたらfullsetなら動くかもしれませんが未検証です。
.NET 2.0でビルドしましょう
.NET2.0用にビルドしないと動きません。
また、ビルドするときはMonoDevelopは絶対に使わないようにしましょう。MonoDevelopが糞なので、完全な.NET2.0のバイナリにビルドしてくれません。
手順としては、- Mono.Cecilのソースコードをcloneしてくる
- Mono.Cecil.slnをXamarin studioやVisual studioで開く
- コンフィグレーションをnet_2_0_Release(またはdebug)にする
- プロジェクトオプション>ビルド>一般のTarget frameworkをMono / .NET 2.0に変更
- 一応クリーンをして、プロジェクトを全てビルド
- {Mono.Cecil}/bin/net_2_0_Releaseに出力されているdllをUnityプロジェクトのEditorディレクトリにコピー
デバッグ情報をきちんと出力しましょう
デフォルトだと、デバッグ情報を生成してくれません。そのため、DLLを改変した場合、例外のスタックとレースのファイルと行数が激しくずれてしまいます。 なので、ここを参考に、DLL出力時にデバッグシンボルを保存する設定をきちんとしてあげましょう。
0 件のコメント:
コメントを投稿