前回の記事でReSharperを使ってCILを見てみましたが、ReSharperを利用すると該当ファイルのCILしか見れず、アセンブリ情報などのCILは見れませんでした。
前回記事:[C#]ReSharperを使ってCILを見る
そこで、ReSharper購入以前に使っていたILSpyを使って見ようと思ったらVisual Studio Extensionがあるのを今更発見したので紹介しておきます。
インストールは簡単でVisual Studioのツールバーのツール=>拡張機能と更新プログラム=>オンラインからILSpyを検索して出てきたものをインストールするだけです。
インストールできたらソリューションエクスプローラーのプロジェクトを右クリックするとILSpyで開く項目があるのでクリックしましょう。
クリックしたらILSpyのWindowが開くのでCILを眺めることができます。
と言ってもアセンブリで眺めたい情報ってあまりないかなという感じですね。
.assembly SharedProperty.NETStandard
{
/*略*/
.hash algorithm 0x00008004 // SHA1
.ver 1:0:0:0
}
.module SharedProperty.NETStandard.dll
// MVID: {908E02B5-14DD-4164-8C84-C47735CD9DCA}
.corflags 0x00000001 // ILOnly
たとえば、SharedProperty.NETStandardはこんな感じのアセンブリ情報ですけど、見た目そのままの意味です。
.NET IL Assemblerという本には.assembly extern { auto }
みたいな感じでバージョン自動解決なアセンブリインポート?というのができるみたいな感じに書いてありましたけどそういった記述は見つけることができず…
ILSpyでアセンブリのReferencesで参照アセンブリがコメントで書かれてるのでILSpyが自動判別してる…?(未確定情報)
また、ILSpyなら名前空間の情報も見れます。(たいした情報ないですけど)
.namespace SharedProperty.NETStandard.Storage
{
.class public auto ansi beforefieldinit SharedProperty.NETStandard.Storage.FileStorage
{
/*略*/
}
.class public auto ansi beforefieldinit SharedProperty.NETStandard.Storage.IsolatedFileStorage
{
/*略*/
}
}
SharedProperty.NETStandard.Storageならこんな感じになりますが、肝心の.class
情報はReSharperでも見れますし、ILSpyでも個別表示できます。
.class
の中のauto
はフィールドなどの配置を自動にしていることを表して、ansi
というのはアンマネージコードと相互運用するときの文字列変換モードの1つでC言語スタイルということを表しているようですが、詳しいことはCILをそれなりに理解してから書いていきたいと思います。