mcpField
I
ilspy-decompile

ilspy-decompile

github.com/davidfowl開発29749 回インストール36 週間前に更新
リポジトリ

ilspy-decompile について

ilspy-decompile は、ILSpy でコンパイル済み .NET アセンブリを調べるためのスキルです。型の一覧表示、アセンブリや指定型の C# への逆コンパイル、コード調査のための IL 表示を開発者に案内します。

主な機能

  1. 01アセンブリを C# に逆コンパイル
  2. 02クラス、インターフェース、構造体の一覧
  3. 03指定型の調査
  4. 04C# の代わりに IL を表示
  5. 05コンパイル可能なプロジェクトの出力

活用シーン

  1. 01NuGet パッケージの実装調査
  2. 02.NET ランタイムライブラリの動作追跡
  3. 03逆コンパイルした C# と IL の比較

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davidfowl/dotnet-skillz --skill ilspy-decompile

インストール後、Claude Code で/ilspy-decompileを入力して読み込まれたか確認します。

詳細

ILSpy による .NET アセンブリの逆コンパイル

このスキルを使うと、コンパイル済みアセンブリを逆コンパイルして、.NET コードの内部の仕組みを理解できます。

クイックスタート

# Decompile an assembly to stdout (no install needed with .NET 10+)
dnx ilspycmd MyLibrary.dll

# Decompile to an output folder
dnx ilspycmd -o output-folder MyLibrary.dll

.NET アセンブリの一般的な場所

NuGet パッケージ
# Windows
~/.nuget/packages/<package-name>/<version>/lib/<tfm>/

# Example: Newtonsoft.Json
~/.nuget/packages/newtonsoft.json/13.0.3/lib/netstandard2.0/Newtonsoft.Json.dll

# Example: Microsoft.Extensions.DependencyInjection
~/.nuget/packages/microsoft.extensions.dependencyinjection/8.0.0/lib/net8.0/Microsoft.Extensions.DependencyInjection.dll
.NET ランタイムライブラリ
# Find .NET install location
dotnet --list-runtimes

# Windows typical paths
C:/Program Files/dotnet/shared/Microsoft.NETCore.App/<version>/
C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/<version>/

# Linux/macOS typical paths
/usr/share/dotnet/shared/Microsoft.NETCore.App/<version>/
/usr/share/dotnet/shared/Microsoft.AspNetCore.App/<version>/

# Example: System.Text.Json from runtime
C:/Program Files/dotnet/shared/Microsoft.NETCore.App/8.0.0/System.Text.Json.dll
.NET SDK リファレンスアセンブリ
# Find SDK location
dotnet --list-sdks

# Reference assemblies (design-time facades)
C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/<version>/ref/net8.0/
プロジェクトのビルド出力
# Debug build
./bin/Debug/net8.0/<AssemblyName>.dll

# Published output
./bin/Release/net8.0/publish/<AssemblyName>.dll

基本的なワークフロー

  1. 理解したい対象(API、クラス、メソッド)を特定します
  2. 対象のコードを含むアセンブリを見つけます
  3. dnx ilspycmd -l class を使って正確な型名を調べます
  4. -t を使って特定の型を逆コンパイルします

コマンド

基本的な逆コンパイル
# Decompile to stdout
dnx ilspycmd MyLibrary.dll

# Decompile to output directory
dnx ilspycmd -o ./decompiled MyLibrary.dll

# Decompile as compilable project
dnx ilspycmd -p -o ./project MyLibrary.dll

# Decompile with nested namespace folders
dnx ilspycmd -p -o ./project --nested-directories MyLibrary.dll
対象を絞った逆コンパイル
# Decompile a specific type
dnx ilspycmd -t Namespace.ClassName MyLibrary.dll

# Decompile with specific C# version
dnx ilspycmd -lv CSharp12_0 MyLibrary.dll

# Decompile with reference path for dependencies
dnx ilspycmd -r ./dependencies MyLibrary.dll
IL コードを表示
# Show IL code instead of C#
dnx ilspycmd -il MyLibrary.dll

# Show IL for specific type
dnx ilspycmd -il -t Namespace.ClassName MyLibrary.dll
型を一覧表示
# List all classes
dnx ilspycmd -l class MyLibrary.dll

# List interfaces
dnx ilspycmd -l interface MyLibrary.dll

# List structs
dnx ilspycmd -l struct MyLibrary.dll

# List enums
dnx ilspycmd -l enum MyLibrary.dll

# List delegates
dnx ilspycmd -l delegate MyLibrary.dll
オプション
# Show help
dnx ilspycmd -h

# Disable update check (useful for CI/automation)
dnx ilspycmd --disable-updatecheck MyLibrary.dll

# Remove dead code
dnx ilspycmd --no-dead-code MyLibrary.dll

例:JsonSerializer の仕組みを理解する

# Find System.Text.Json in the runtime
dotnet --list-runtimes
# Microsoft.NETCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

# List classes to find JsonSerializer
dnx ilspycmd -l class "C:/Program Files/dotnet/shared/Microsoft.NETCore.App/8.0.0/System.Text.Json.dll"

# Decompile JsonSerializer
dnx ilspycmd -t System.Text.Json.JsonSerializer "C:/Program Files/dotnet/shared/Microsoft.NETCore.App/8.0.0/System.Text.Json.dll"

例:NuGet パッケージの実装を調べる

# Decompile Polly's retry logic
dnx ilspycmd -t Polly.Retry.RetryPolicy ~/.nuget/packages/polly/8.0.0/lib/netstandard2.0/Polly.dll

# Decompile entire package to project for exploration
dnx ilspycmd -p -o ./polly-src ~/.nuget/packages/polly/8.0.0/lib/netstandard2.0/Polly.dll

例:ASP.NET Core がリクエストを処理する仕組みを確認する

# Find the ASP.NET Core runtime
# C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.0\

# Decompile the Kestrel server
dnx ilspycmd -l class "C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/8.0.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll"

dnx ilspycmd -t Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer "C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/8.0.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll"

例:C# と IL を比較する

# View C# source
dnx ilspycmd -t MyNamespace.MyClass MyLibrary.dll

# View IL code for same type
dnx ilspycmd -il -t MyNamespace.MyClass MyLibrary.dll

C# 言語バージョン

-lv オプションで指定できるバージョン:

  • CSharp1 から CSharp12_0
  • Latest、Preview

コメント