0

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

4

2 回答 2

1

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

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

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

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

于 2013-05-07T12:24:47.750 回答
1

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

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

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

于 2013-05-07T11:52:58.540 回答