You open a compiled .NET assembly and the decompiled code is full of names like local1 and local2. The compiler threw away the original local variable names, so the code is hard to follow. Dis# is a .NET decompiler that lets you rename those items and keep your changes.
Quick facts
- Output languages: C#, Visual Basic.NET, Delphi.NET and Chrome
- Project file: .dis extension
- Trial: a trial version is available
- Assembly format: supports .NET 2.0, including generics

Key features
Rename variables in place and save them to a project file
A .NET assembly does not store local variable names. Dis# assigns names based on type, but you can double-click or press Enter on a name and type a better one. The .dis project file holds all your edits, so you don't redo them next time.
Decompile quickly
Dis# uses its own metadata structure on top of the PE metadata. The vendor says it decompiles more than 2000 methods per second and is 25-700 times faster than other .NET decompilers. That is a vendor claim, not an independent test.
Export a Visual Studio project
Dis# generates project files that are ready to load in Visual Studio. Source files go into folders that match their namespaces. It also creates the AssemblyInfo file, adds the resources, builds .resx files for .NET forms and extracts the application icon.
Pull names from PDB and XML documentation
Dis# reads names from .PDB files and loads assembly XML documentation. Both can load automatically. You can also run a deobfuscation step to restore readable names.
Adjust how the code looks
You can switch between full and short type names, and between decimal and hexadecimal constants. Other options include Unicode characters, type detail and single-statement braces.
Read a simpler pseudo assembler
Pseudo assembler (pasm) is meant for reading, not compiling. It uses C#-style method titles and shows only the significant IL. Labels appear only on real branch targets.
Browse the assembly
You can see AssemblyInfo, references, resources and the entry point. Outline modes range from public only to full. You can open code in the same window or a new tab, and turn on auto-decompile when you select a method. You can also see which methods a method calls and which call it.
Who it's for
It suits developers who need to read or recover code from .NET assemblies and want the result to look close to hand-written source. It fits especially well if you will return to the same assembly and want your renamed variables kept.
Pros and cons
- Pro: Renames persist in a project file.
- Pro: Four output languages.
- Pro: Exports straight to Visual Studio projects.
- Con: The vendor's feature list centers on .NET 2.0 support. It doesn't describe newer .NET formats.
- Con: The speed figures come from the vendor.
FAQs
Does Dis# restore the original local variable names?
Not automatically. The names are not in the assembly. Dis# assigns names by type, reads PDB files where available, and lets you type your own names.
Which languages can it output?
C#, Visual Basic.NET, Delphi.NET and Chrome.
Can I open the result in Visual Studio?
Yes. It generates project files for the different languages that are ready to load in Visual Studio.
Is there a trial?
Yes, a trial version is available.