2010-08-05 163 views
3

如果源代碼不可用,是否有方法可以確定.NET程序集的原始語言?是否有可能確定.NET程序集編寫的語言?

+0

這是你需要做的一次性事情還是你需要一種算法來確定給定程序集的語言? – 2010-08-05 01:18:23

+0

@ Igor-Zevaka:我正在尋找可重複的東西,可能是通過反思,我可以用它來生成指標。的 – kbrimington 2010-08-05 02:03:22

+0

可能重複[是否有可能以確定哪種語言.NET程序集寫事後?](http://stackoverflow.com/questions/579636/is-it-possible-to-determine-in-which -language-a-net-assembly-was-written-ex-pos) – 2013-05-13 18:09:34

回答

8

不是真的,但你有時可以猜測。

例如,如果你有一個包含匿名類型的一個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://stackoverflow.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

2

您可以通過查看它引用的組件來猜測。例如,如果您看到Microsoft.CSharpMicrosoft.VisualBasic之一,那可能會給您一個很大的提示。

1

不是真的,因爲它們都大致編譯爲相同的IL。

相關問題