【问题标题】:Decompiled assembly, which programming language was used反编译的程序集,使用了哪种编程语言
【发布时间】:2013-05-07 11:40:25
【问题描述】:

你怎么知道反编译的程序集是用 C# 还是 VB.net 编写的?

【问题讨论】:

  • 在什么情况下重要?
  • @MarcGravell 我要处理一个新的 .net 项目,我有一些程序集,但没有源代码。
  • 这并没有回答为什么重要的问题......
  • 只看清单中的程序集引用。从 vb.net 代码构建的任何内容都将始终引用 Microsoft.VisualBasic.dll。它不是 100% 可靠的,C# 程序当然也可以引用它。一个重要的提示,你永远不应该关心这个。
  • 感谢 Hans,这就是我要找的程序集。

标签: .net decompiling


【解决方案1】:

我不知道清单/属性中有任何明确的“我是用...编译的”信息。您也许可以使用特征检测(特别是匿名类型的实现方式和模块级方法等),但是:

  • 在大多数情况下,这无关紧要
  • 您不了解的编译器可能看起来很相似,从而给您错误的答案
  • 并非所有 IL 都来自编译器;它可以由原始 IL 组装而成,可以使用 IL 作为源语言,也可以通过元编程技术进行组装

就个人而言,我强烈建议避免对源语言的任何依赖

【讨论】:

    【解决方案2】:

    我依稀记得有一个实用程序集,它在 VB 项目中被自动引用,但不是 C# 项目。我说的是 .net 1.1 时代(Visual Studio 2003)。它使访问 Explorer shell 的某些部分变得非常容易。 我一直在寻找但一直找不到它(如果我记得它是什么,我会编辑)。它可能在后来的 Visual Studio 中已被淘汰/丢弃,但这对于原始 VB 来说是一个非常强大的指标(认为 C# 程序集也可以引用它)。

    编辑:正如 Hans 在他的评论中指出的,程序集是 Microsoft.VisualBasic。

    除此之外,通过查找不同版本的 C# 和 VB 编译器使用的 IL 模式来编译不同的公共语言结构,这可能是可行的。

    如果您只想查看已编译程序集的源代码的近似值。如果原始程序集没有被混淆,.Net 反编译器(如 ILSpy、.Net Reflector 或 dotPeek)会做得很好。

    【讨论】:

    • 小问题:任何程序集都可以引用该程序集(实际上有一些方便的东西,如果你能克服以 VisualBasic 名称引用某些东西的语言势利障碍)
    • 是的,我在回复中写道。事实上,我从未使用过 vb,但在我的 C# 程序中使用过该程序集。
    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多