2014-12-11 27 views
0

在Visual Studio中,當我們編譯源代碼時,它會生成一個字節碼,然後當我們構建它時,創建一個dll文件。我一直堅持如何通過.net框架實現字節碼(通用intermidiate clanguage)。理解CIL和DLL都是平等的,但我不確定它。請說明我的老闆。如果不是CLR如何執行CIL,dll文件是CIL(通用中間語言)嗎?

+0

請嘗試重組/澄清問題..提高語言/語法將有助於更好地瞭解你問什麼。 – 2014-12-11 05:41:45

+1

在你的陳述中,你的意思是「我的理解都是平等的」,你指的是哪兩個實體? – 2014-12-11 06:15:45

回答

3

總之,當一個.NET語言編譯器編譯的一個項目,則變成無論是淨模塊,或組件。它們中的任何一個都包含IL(中級語言)的代碼。單獨的.Net模塊不可用,因爲它必須包含在程序集中。 (.Net模塊不常用,最常見的編譯項目的dll是,一個模塊組件)。

一旦你「安裝」在目標機器上該組件中,你有兩個選擇:

  • 這既可以作爲安裝後,即DLL包含IL。只有在執行期間,隨着代碼的執行,.Net運行時的一個組件抖動會將其轉換爲機器代碼(本地程序集)。每次將程序集加載執行時,都會重複將IL轉換爲本機機器碼的過程,以適用於每個新過程。

  • 它可以在安裝時轉換爲機器代碼(使用工具如ngen)。每次執行時,機器代碼都可以執行,因此可以更快地啓動/首次執行方法。

注意:一般的話題很廣,這爲10,000過程英尺級別概述。有很多細節和.Net原生等未來技術已被排除在外,以保持這個答案簡單並且與提出問題的方式最相關。

1

在簡單的話,

C# - > C#編譯器(編譯時間) - >組件(DLL/EXE)或達網絡模塊(MSIL形式)

裝配 - > JIT編譯器(運行時間) - >機器代碼(二進制形式)

有關詳細信息, http://msdn.microsoft.com/en-in/library/ht8ecch6(v=vs.90).aspx

+0

我認爲,簡單地說「彙編」在這裏是非常混亂的,因爲這個詞有兩個不同的含義,這兩個詞在這裏可能是相關的:[彙編](http://en.wikipedia.org/wiki/Assembly_language)與[組裝](http://en.wikipedia.org/wiki/Assembly_%28CLI%29)。 – svick 2014-12-11 14:04:33