【问题标题】:Can .NET dissemblers like Reflector access the comments in the origial source code?像 Reflective 这样的 .NET 反编译器可以访问原始源代码中的注释吗?
【发布时间】:2010-09-23 06:24:54
【问题描述】:

这些 cmets 不是 XML cmets,只是普通 cmets

【问题讨论】:

  • XML cmets 被称为 XML 文档注释

标签: .net reflector


【解决方案1】:

没有。注释被编译器忽略并且在程序集中没有表示。

【讨论】:

  • 你的意思是一个程序集实际上不携带任何与 cmets 相关的信息吗?还是它带有信息但无法访问?
  • 源代码供人类使用。组件用于机器。程序集中没有 cmets。
  • @AMissico:您好,程序集不需要 cmets,但它仍然可以将 cmets 作为程序的一部分携带?
  • @user370401。不会。编译器会忽略、不解析注释。因此,程序集中绝对没有 cmets,没有评论信息,甚至没有与 cmets 远程关联的任何内容。注释仅在源代码中。
  • @user370401 如果您碰巧在标准 .NET 程序集的任何部分中找到任何评论派生信息,我会给您我的所有声誉积分。圣经代码风格的统计恶作剧除外。
【解决方案2】:

反汇编程序无法获取原始源代码。它只会创建与原始源代码执行相同操作的源代码。

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

【讨论】:

  • +1 重点强调源是从程序集中重新创建的。
  • 简单的例子是局部变量的名称——反射器通常必须弥补它们。
  • 我不能同意反汇编程序无法获取源代码,而只能编写代码来实现相同的功能。证据是某些陈述的顺序。如果反汇编程序无法获取源代码,它就无法以相同的顺序得出完全相同的语句。也许它在获取变量的名称时有些困难,但它肯定可以看到每一条语句。
  • @user370401:反汇编程序只能访问已编译的代码,即执行源代码描述的指令。反汇编器只能创建描述指令功能的代码,而不是原始描述。例如,如果您编译像 int x = 1 + 2 + 3; 这样的语句并将其反汇编,您将得到 int x = 6;,因为这就是编译指令的作用。
【解决方案3】:

只是添加到 Marks 答案 - 在源代码中找到的 XML cmets / docstrings 也没有写入程序集,因此也无法使用 Reflector 访问。

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

【讨论】:

  • XML cmets 被称为 XML 文档注释
  • 只是为了迂腐,如果您将它们放在正确的位置,则提取的 XML 文档注释可以包含在 Reflector 的显示中。不过,这不是由于程序集本身的任何原因。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多