.NET 反编译工具(如 Reflector)能够访问原始源代码中的注释吗?

8

这些注释不是XML注释,只是普通的注释


1
XML注释被称为XML文档注释。 - AMissico
4个回答

17

不,编译器会忽略注释并且在汇编中没有任何体现。


你的意思是汇编实际上不包含任何与注释相关的信息吗?还是它包含了信息但是无法访问? - Aperture
源代码是为人类而写的,而程序集则是为机器而设计的。在程序集中没有注释。 - AMissico
@user370401:这些注释不在汇编代码中。如果你没有生成一个 XML-注释文件并将其与汇编代码一起交付,那么这些注释将无法访问。 - Christian
1
@user370401。注释不会被编译器解析。因此,在汇编语言中绝对没有注释、注释信息或任何与注释相关的东西。注释只存在于源代码中。 - AMissico
2
@user370401 如果你真的在标准.NET程序集的任何部分中找到了基于评论的信息,我会把我所有的声望点数都给你。但请注意,类似圣经代码风格的统计花招是不算的。 - Mark Cidade
显示剩余2条评论

6

一个反汇编程序无法获得原始的源代码。它只能创建与原始源代码执行相同功能的源代码。

由于注释在程序中不会产生任何指令,因此无法从编译的代码中重新创建注释。


1
+1个好点,强调源代码是从汇编重新创建的事实。 - Brian Rasmussen
一个简单的例子是本地变量的名称 - Reflector通常必须自己编造。 - Damien_The_Unbeliever
我不能同意反汇编器无法获取源代码,只能编写代码以实现相同的功能。证据是某些语句的顺序。如果反汇编器无法获取源代码,它就无法按照相同的顺序提供完全相同的语句。也许它在获取变量名称方面有一些困难,但它肯定可以看到每个语句。 - Aperture
反汇编器只能访问已编译的代码,这些代码是执行源代码描述操作的指令。反汇编器只能创建描述指令操作的代码,而不是原始描述。例如,如果您编译像 int x = 1 + 2 + 3; 这样的语句并对其进行反汇编,您将得到 int x = 6;,因为这是编译指令所做的操作。 - Guffa

1

补充Mark的答案,源代码中的XML注释/文档字符串也不会写入程序集,因此使用Reflector也无法访问。

XML注释会被写入一个单独的xml文件,Visual Studio IDE需要访问该文件才能在智能感知中提供这些注释。


1
XML注释被称为XML文档注释。 - AMissico
只是为了严谨起见,如果您将它们放在正确的位置,提取的XML文档注释可以包含在Reflector的显示中。但这并不是由于程序集本身的任何原因。 - Mark Hurd

1

不,它不会读取源代码中的注释行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接