Ever heard about information entropy,
http://en.wikipedia.org/wiki/Information_entropy[
^]?
When you turn source code into executable code, entropy grows and part of information is lost. If you have the source you don't have this problem and would not ask this question. So, you don't have the source but deal with the executable code of application only, the source is lost for you, as well as big part of information. (An executable file does not contain source code, in case you were not aware of it.)
Now, remember that .NET executable code is a bytecode; and .NET includes Reflection. An assembly can be reverse-engineered (
http://en.wikipedia.org/wiki/Reverse_engineering[
^]) pretty easily to get some source code equivalent to the original one. (No, Reflection is not enough to do that.) Nevertheless, this is different source code, not the same as original. Generally, it can be harder to read and understand. Also, the assembly could be obfuscated before deployment, see
http://en.wikipedia.org/wiki/Obfuscation[
^].
To reverse-engineer some assembly, you can use Reflector. See
http://en.wikipedia.org/wiki/.NET_Reflector[
^],
http://www.reflector.net/[
^]. Unfortunately, this software is proprietary, not Open Source.
[EDIT]
Alternatively, look at ILSpy:
http://wiki.sharpdevelop.net/ilspy.ashx[
^].
This product is Open Source.
[END EDIT]
—SA