2010-03-16 75 views
2

我只是想問我是否正確與.NET有關。所以,.NET是一個新的框架,可以讓您輕鬆實現新舊窗口功能。它類似於java,它也被編譯成「字節碼」,但其名稱是Common Language Infrastructure或CLI。該語言由.NET Framework解釋,因此使用.NET編程生成的代碼不能由CPU直接執行。現在,很少有語言可以編譯到CLI。首先,它是微軟開發的C#,而不是J#,C++其他。我懷疑這總的來說是對的,至少我希望我理解它是正確的。Visual Studio和.NET編程

但是,我仍然缺少的是,你可以寫在C#機器代碼編譯代碼?而且,如果使用Visual Studio 2005,那麼當我選擇Win32項目時,它將被編譯爲機器代碼,因此只需要運行此應用程序就是Windows動態鏈接庫,因爲靜態庫代碼已在鏈接階段實施到應用程序中。這些動態鏈接庫是在每個Windows安裝中實現的,或由DirectX安裝提供。

但是,當我在Visual Studio 2005中選擇CLR時,應用程序被編譯爲CLI代碼,並首先執行.NET框架,並且比.NET框架執行該程序,因爲它不在機器代碼中。

那麼,我是對的?我問,因爲你可以在互聯網上閱讀這些信息,但我沒有人告訴我我是否理解它。謝謝。

+0

公共語言基礎結構(CLI)是框架本身。它包含垃圾收集器和JIT編譯器等。該JIT編譯器將中間語言或IL(=字節碼)編譯爲機器碼。 CLI不是字節碼,但是IL是。 – Steven

+0

容易讓CLI和CIL感到困惑。我想這就是爲什麼我們通常只是說「IL」而不是「CIL」(或偶爾「MSIL」,但現在這是一個古老的術語!) –

回答

2

.NET的第一個IDE來自2002年,因此.NET已有8年的歷史。整個永恆;)

.NET以C#,Basic和J#以及C++開始。隨後還有其他許多語言,例如在動態語言IronRuby領域。使用C#和Basic,沒有選項可以生成不需要.NET框架的代碼,使用C++您可以選擇該選項。所以不行,用標準工具,你不能將C#編譯成機器碼。

有些事情可以優化運行時(在JIT打開程序集之前,看看ngen)。它的內容並不總是被解釋,所以它比VB腳本更快。這通常不是每次都執行,而是第一次在安裝應用程序時執行一個程序集或ngen。

HTH, -sa

+2

您可以將一個.NET程序集編譯爲NG。它生成一個本地圖像(=機器代碼)。不過,沒有.NET框架的情況下運行這個本地映像是不可能的。所以從某種意義上說,它並不是真正的普通舊機器碼。 – Steven

+1

我認爲NGen有內聯所有依賴的選項,所以你可以生成不需要.net框架運行的原生圖像。編輯:啊..不是使用NGen,而是使用蠑螈的RemoteSoft,您可以生成不需要安裝.net框架的可執行文件。價格雖然:http://www.remotesoft.com/linker/intro.html –

2
  • CLI不是由.NET框架的解釋,但通常編譯。純粹的解釋會太慢。
  • C#,J#等同時出現。事實上,J#起源於微軟J ++ ....所以人們可以說它早就在那裏。 C++之前也有過,您可能指的是託管C++(NOW:C++/CLI)。我認爲這是同時完成的 - 同時進行。有超過2-3人在microosft工作;)
  • 你不能將C#寫入機器碼。 win32項目是本地C++(即不使用.NET運行時的版本)。