是否可以创建一个读取自己的源代码的程序?

时间:2015-12-28 18:01:44

标签: c# .net

我的意思是,是否可以创建一个与

等效的程序
public class PrintOwnSourceCode
{
   public static void Main ( )
   {
      System.Console.WriteLine([something]);
      // prints "public class PrintOwnSourceCode { public static void Main ( ) { ... } }" 
   }
}

???

这会是反射的一个例子吗?

2 个答案:

答案 0 :(得分:2)

有点。

反编译器可以做类似的事情: I just decompiled a decompiler so I could use it to decompile itself

.NET反编译器,如[.NET Reflector](http://www.red-gate.com/products/dotnet-development/reflector/)和dotPeek,能够反映.NET程序集并生成类似于源代码的文件。它看起来与源代码不完全相同,因为编译和反编译有点像将英语翻译成法语然后再翻译成英语 - 结果并不总是保证为1:1,因为谷歌翻译可以证明。为了便于阅读但编译器不需要的信息(如空白)将在反编译过程中丢失。因此,您的应用程序可以自行反编译或调用外部反编译器进行自我打印。

<强>除了

在编译语言中,编译后的代码无法直接访问源代码。 (公司通常不会将带有编译代码的源代码发送给客户。他们只发送已编译的可执行文件。)当涉及到解析语言(如JavaScript)时,它就是一个完全不同的故事。由于源必须可供运行时使用以便可以对其进行解析和运行,因此代码始终可以找到它自己的源文件,打开它并打印出来。

答案 1 :(得分:0)

回答here

简短的回答是你无法通过反思来打印它。

如果要打印出文件,则需要加载源文件本身(并使文件可用)。