2013-05-05 93 views
3

在閱讀Troelsen的書「Pro C#5.0和.NET 4.5 Framework」時,我遇到了這兩個術語。 我的理解或多或少是一個公共語言運行時(CLR),但是「.NET運行時」與CLR相同嗎?「CLR」與「.NET運行時」相同嗎?

我想是的。

回答

7

公共語言運行時是.NET運行時的特定實現,但也有其他語言 - 即the Mono runtime

+0

我看,有些人喜歡單聲道運行時,像Portable.NET運行。 謝謝,我明白了。 – Aremyst 2013-05-05 14:14:26

6

CLR是部分 .NET程序需要的運行時支持。相當重要的一部分,但它不是唯一的一個。您總是會獲得一組在.NET過程中加載的本機DLL。您可以通過打開非託管調試,Project + Properties,Debug選項卡,勾選「啓用非託管代碼調試」來查看它們。在你開始之後,你會看到那些帶有Debug + Windows + Modules窗口的DLL。

我會記錄下.NET 4.5版名:

  • mscoree.dll中的 「裝載機存根」。這是一個可以讓你的.NET程序加載的程序。 Windows對這個DLL有特殊的瞭解,當它檢測到.NET可執行文件時,加載器會自動將控制權交給它。它所做的一件非常平凡的事情是將.NET進程轉換爲64位進程,即使EXE頭本身表示32位進程也是如此。
  • mscoreei.dll,默認的CLR主機。 CLR需要一個主機,使CLR適應所需的運行時特性。自定義CLR主機的示例是SQL Server和ASP.NET。當您調試.NET程序時,Visual Studio主機進程vshost.exe處於活動狀態。該DLL還負責內置到.NET 4+中的並行版本控制支持,允許進程擁有多個版本的CLR。
  • clr.dll,這就是CLR
  • clrjit.dll,這就是剛剛在即時編譯器
  • msvcr110_clr0400.dll,C運行時庫。其他DLL用C++編寫,這個DLL包含必要的運行時支持代碼。你也可以自己使用它,例如,Math.Pow()最終會調用這個DLL中的pow()函數。

您還會看到從c:\ windows \ system32(Windows操作系統DLL)加載的一堆DLL。重要的是ntdll.dll,kernel32.dll和user32.dll。在一個典型的.NET過程中更多。由於Windows中的每個進程都將使用這些組件,因此您無法將它們計算爲.NET運行時組件。

7

公共語言基礎(CLI),在standard ECMA-335定義,描述了其中包括:

  • 通用類型系統(CTS);
  • the 公共語言規範(CLS);
  • the 虛擬執行系統(VES);
  • the Common Intermediate Language(CIL)。

的VES脫穎而出此列表中(這是不常見的),是一個假想的運行時系統的描述。實際的運行時實現通常稱爲公共語言運行時間(CLR),但該術語不會出現在ECMA-335中。

CLI有幾種實現方式:.NET Framework,.NET Micro Framework,XNA Framework,Silverlight,Mono平臺等......每個平臺或框架都實現一個或多個CLR版本。

有Microsoft CLR(又名.NET CLR),通常稱爲.NET運行時。還有一個Mono CLR,通常稱爲Mono運行時。還有Silverlight CLR和.NET Compact CLR。

由於Microsoft CLR是第一個也是最知名的CLR,因此術語CLR的不合格使用通常不涉及.NET運行時的特定版本。但CLR是而不是 .NET運行時的特定實現......這是相反的方式。

+0

謝謝你的回答。但是我一開始就迷失了:什麼是運行時系統? – BKSpurgeon 2016-02-17 04:29:22