読者です 読者をやめる 読者になる 読者になる

渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きく慣れるように。。。 ※所属団体とは一切関係がありません

自分の書いたC#がどのようにコンパイルされてDLLになっているのかを確認する方法


f:id:esakun:20150730215258g:plain

自分が書いたC#コードはdllにコンパイルされる前に変換処理が入ります。
どのような形でDLLにされているのか気になると思いますので、MonoDevelopで確認してみます。

f:id:esakun:20170410224842p:plain:w300
View > Pads > SolutionからSolutionパネルを開きます。

f:id:esakun:20170409231623p:plain:w300
Assembly-CSharp/Referencesフォルダを右クリック。
Edit References...を選択します。

f:id:esakun:20170409231909p:plain:w450
.Net Assemblyタブをクリックして、下部のBrowseからdll選択ポップアップを表示させます。そしてLibrary/ScriptAssemblies/Assembly-CSharp.dllを追加します。

f:id:esakun:20170410225807p:plain:w300
先ほど追加したAssembly-CSharpをダブルクリックしてAssembly Browserを開きます。

f:id:esakun:20170410230029p:plain:w450
自分が書いたクラスを選択すると、コンパイルの際変換されたコードが表示されます。
※VisibilityをAll members、LanguageをC#にすると見やすいです

サンプルコード

上記のように変換されます。

  • 不要なusing削除
  • アクセス修飾子の補完(ここではprivate)
  • varが適正な型へ置き換えられる
  • ブレース(括弧)の補完
  • インデントがスペースからタブへ

サンプルコードではこのような処理をしてくれているようです。自分のコードがどのような変換をされているかを知ることで、コード最適化の材料になるかもしれません。

※プロダクトによっては表示されない処理が入っていることもあるため、あくまで自己責任でお願い致します。

追記

自分の書いたC#がどのように展開されるのかを確認する方法 - 渋谷ほととぎす通信

C#をコンパイルしたらILになって、それからIL2CPPで変換されるという流れ。「展開されたコード」というのはMonoDevelopが気を利かせてILを逆コンパイルした結果なので、実際のDLLの中身ではないです。

2017/04/13 05:21

このようコメントを頂きました。ありがとうございます!!ツッコミありがたいです。
たしかにiOSプラットフォームへビルドする際は、設定次第ですがIL2CPPという技術で

C#ILC++

という変換をします。 C++コードに変換されているので、この時点でDLLは存在しません。

本記事の展開されたコードというのは、あくまでC#がDLLにコンパイルされた時の、Monoコンパイラによるコードの変換を確認するというのが趣旨なので、実際のDLLの中身ということになると思います。 こちらC#のままではなくILになってDLL化されるとのことです。matarilloさんありがとうございました。

※展開というキーワード紛らわしいのでタイトル、本文を若干修正しましたorz

参考

あわせてどうぞ

www.shibuya24.info

www.shibuya24.info

www.shibuya24.info