在Visual Studio中,當我們編譯源代碼時,它會生成一個字節碼,然後當我們構建它時,創建一個dll文件。我一直堅持如何通過.net框架實現字節碼(通用intermidiate clanguage)。理解CIL和DLL都是平等的,但我不確定它。請說明我的老闆。如果不是CLR如何執行CIL,dll文件是CIL(通用中間語言)嗎?
回答
總之,當一個.NET語言編譯器編譯的一個項目,則變成無論是淨模塊,或組件。它們中的任何一個都包含IL(中級語言)的代碼。單獨的.Net模塊不可用,因爲它必須包含在程序集中。 (.Net模塊不常用,最常見的編譯項目的dll是,一個模塊組件)。
一旦你「安裝」在目標機器上該組件中,你有兩個選擇:
這既可以作爲安裝後,即DLL包含IL。只有在執行期間,隨着代碼的執行,.Net運行時的一個組件抖動會將其轉換爲機器代碼(本地程序集)。每次將程序集加載執行時,都會重複將IL轉換爲本機機器碼的過程,以適用於每個新過程。
它可以在安裝時轉換爲機器代碼(使用工具如ngen)。每次執行時,機器代碼都可以執行,因此可以更快地啓動/首次執行方法。
注意:一般的話題很廣,這爲10,000過程英尺級別概述。有很多細節和.Net原生等未來技術已被排除在外,以保持這個答案簡單並且與提出問題的方式最相關。
在簡單的話,
C# - > C#編譯器(編譯時間) - >組件(DLL/EXE)或達網絡模塊(MSIL形式)
裝配 - > JIT編譯器(運行時間) - >機器代碼(二進制形式)
有關詳細信息, http://msdn.microsoft.com/en-in/library/ht8ecch6(v=vs.90).aspx
我認爲,簡單地說「彙編」在這裏是非常混亂的,因爲這個詞有兩個不同的含義,這兩個詞在這裏可能是相關的:[彙編](http://en.wikipedia.org/wiki/Assembly_language)與[組裝](http://en.wikipedia.org/wiki/Assembly_%28CLI%29)。 – svick 2014-12-11 14:04:33
- 1. 用於通用中間語言(CIL)的IDE
- 2. .NET 4.0的CIL(公共中間語言)已更改嗎?
- 3. 如何保護CIL(通用中間語言)程序集免於反編譯
- 4. CIL ANTLR語法?
- 5. CIL執行On Error Resume Next
- 6. CIL中的nop是什麼?
- 7. 哪些語言編譯成CIL/MSIL
- 8. 編譯基於堆棧的語言CIL
- 9. Frama-C:在Cil謂詞中替換Cil術語
- 10. 瞭解特定的CIL/CLR優化
- 11. 如果將.NET語言編譯爲CIL,那麼.NET語言選擇是否重要?
- 12. 如何編譯CIL代碼?
- 13. 在CIL中分支
- 14. 如何以編程方式在.Net可執行文件/ dll中找到字節碼(CIL)?
- 15. CIL如何使用網絡/ http請求?
- 16. LINQ如何編譯到CIL中?
- 17. 寫入CIL
- 18. 如何在我的CIL模塊中訪問給cilly的文件
- 19. 在CIL中做什麼「auto」,「ansi」和「cil managed」?
- 20. 如何將CIL代碼插入到C#
- 21. 將C源文件合併爲CIL
- 22. 優化CIL輸出
- 23. .NET CIL Call或CallVirt?
- 24. 在CIL(MSIL)中的Stringbuilder
- 25. 在CIL(OCaml)中打印
- 26. VB.NET和C#CIL看起來是一樣的嗎?
- 27. 這些CIL語句有什麼區別?
- 28. 在cil代碼中獲得'ldftn'函數指針,在cil代碼中使用ldftn'
- 29. CIL中沒有運行代碼的正確技術術語是什麼?
- 30. 如何通過生成CIL開關指令來停止C#的switch語句
請嘗試重組/澄清問題..提高語言/語法將有助於更好地瞭解你問什麼。 – 2014-12-11 05:41:45
在你的陳述中,你的意思是「我的理解都是平等的」,你指的是哪兩個實體? – 2014-12-11 06:15:45