// the find
icsharpcode/ILSpy
.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
ILSpy is the de facto open-source .NET decompiler — used directly, embedded in Visual Studio (F12 go-to-definition ships ILSpy's engine), and available as a NuGet library for programmatic decompilation. If you've ever pressed F12 on a BCL type in VS and seen readable C#, you've used this. It's for anyone who debugs third-party assemblies, investigates obfuscated code, or needs to recover source from a DLL.
The `ICSharpCode.Decompiler` NuGet is genuinely useful as a library — you can point it at any assembly and get C# out programmatically, which is handy for tooling and analysis pipelines. PDB generation from decompiled output is a standout feature: you get breakpoints and stepping in assemblies you don't have source for. ReadyToRun support means it handles the tiered-compilation artifacts that trip up most decompilers. The test suite is thorough — hundreds of IL round-trip tests with expected C# output stored as files, so regressions are caught rather than discovered by users.
The decompiler still chokes on heavily optimized release builds and certain async state machine patterns — the output compiles but doesn't always reflect what the developer originally wrote. The Avalonia-based cross-platform UI is functional but clearly an afterthought relative to the Windows WPF version; layout and keyboard navigation feel rough on Linux/Mac. Plugin API is not versioned or stable, so third-party plugins break on minor releases with no migration path. Build setup is surprisingly painful — you need both .NET 10 and .NET 11 SDKs simultaneously, which is an odd requirement that catches people off guard.