是否有可能确定.NET程序集编写的语言?

问题描述:

如果源代码不可用,是否有方法可以确定.NET程序集的原始语言?是否有可能确定.NET程序集编写的语言?

+0

这是你需要做的一次性事情还是你需要一种算法来确定给定程序集的语言? – 2010-08-05 01:18:23

+0

@ Igor-Zevaka:我正在寻找可重复的东西,可能是通过反思,我可以用它来生成指标。的 – kbrimington 2010-08-05 02:03:22

+0

可能重复[是否有可能以确定哪种语言.NET程序集写事后?](http://*.com/questions/579636/is-it-possible-to-determine-in-which -language-a-net-assembly-was-written-ex-pos) – 2013-05-13 18:09:34

不是真的,但你有时可以猜测。

例如,如果你有一个包含匿名类型的一个VB.NET组件,在组件中的编译器生成的名字会是这个样子:

VB$AnonymousType_T<T0, T1> 

匿名类型在C#程序集是这样的:

<>f__AnonymousType0<....> 

不同的编译器会实现这些稍微不同的事情。 C++/CLI程序集通常在程序集中使用“有趣”名称(例如属于全局作用域等的函数)中有很多类型。

Visual Basic应用程序还引用Microsoft.VisualBase组件(尽管任何.NET应用程序可以在技术上引用任何组件,所以这不是100%的指示符)。

+1

我应该提到匿名类型的命名(等等)是一个实现细节,并且可能会在更高版本的编译器中进行更改(s )... – 2010-08-05 01:27:49

+0

它会出现你是最正确的。这篇相关的文章包含了更多的启发式方法,但从根本上说,它可以归结为“猜测”。谢谢。 http://*.com/questions/579636/is-it-possible-to-determine-in-which-language-a-net-assembly-was-written-ex-post – kbrimington 2011-02-01 13:55:16

您可以通过查看它引用的组件来猜测。例如,如果您看到Microsoft.CSharpMicrosoft.VisualBasic之一,那可能会给您一个很大的提示。

不是真的,因为它们都大致编译为相同的IL。