反编译的DLL - 帮助判断它是C#还是VB.NET的线索?

cod*_*ike 4 .net c# vb.net decompiler

当使用像DotPeek这样的东西来反编译DLL时,如何判断它最初是用VB.Net还是C#编码的?

我认为没有简单的方法可以告诉你,但是在某些反编译代码中可能会有告诉标记(即线索)?

Guf*_*ffa 7

您可以查找对Microsoft.VisualBasic库的引用.如果存在,则代码很可能是使用VB生成的.该库有时也包含在C#项目中,但这并不常见.如果参考不存在,那肯定不是VB.

(嗯,使用命令行编译器和特殊的编译器开关可以在没有库的情况下编译VB,但这种情况非常罕见.)

您还可以检查VisualBasic库的使用频率.在常规的VB程序中,它会经常使用,但在C#程序中,它通常只用于某些特定的任务,而这些任务在其他库中是不可用的,比如DateDiff调用.

任何特定于VB的命令,如CIntMid将显示为对VisualBasic库的调用,甚至是=在字符串上使用时的操作符,都将使用该库.这段代码(在哪里ab是字符串):

If a = b Then
Run Code Online (Sandbox Code Playgroud)

实际上会进行库调用以进行比较,并在反编译为C#时显示如下:

if (Operators.CompareString(a, b, false) == 0) {
Run Code Online (Sandbox Code Playgroud)

  • *如果参考不存在,它几乎肯定不是VB.*如果你只是想在VB和C#之间做出决定,那就是一个非常强大的线索 (2认同)