There are many reasons why you might want to decompile a .NET program. Consider the .NET world, where there are simple disassemblers and sophisticated decompilers that often work well and with little user intervention. Would you use a .NET disassembler to try to understand some .NET bytecode assembled program? It is most likely not. If there is a good decompiler available, you do not need to see the individual instructions. If and when a good decompiler for exe and dll assemblies becomes available, it will be a better choice than a disassembler in most circumstances.
The freeware Refractor .NET assembly browser and decompiler recovers source code from crashes and convert .NET exe and dll to C#, VB.Net, and IL. It generates the high level code in the back end of the decompilation. Just as a compiler may have several back ends for generating machine code for different architectures, the decompiler(the free disassembler) has several back ends for generating high level code in different high level languages.
The following features are present in Refractor freeware .NET assembly browser and free decompiler: