2011-11-18 65 views
0

我知道,這個問題對許多人來說可能是一個常見的問題,但我很困惑。我在用c#閱讀.net。我經歷了許多文章和msdn。我的疑問是:已發佈的應用程序(windows窗體)是機器碼?

當我在VS中開發C#Windows窗體應用程序代碼並運行它時,請執行Project \ bin \ Debug \中具有擴展名「.exe」的文件是中間代碼還是機器代碼?當我發佈它時,我得到一個安裝程序的那一刻,它是一個機器代碼還是一箇中間代碼?因爲有時安裝程序需要安裝.net。

請幫我理解這個概念。

謝謝。

回答

3

編譯的.exe文件包含MSIL(微軟中間語言代碼),這裏是怎麼回事了(從here):

  • 的源代碼轉換成通用中間語言,CIL的相當於彙編語言的CPU。
  • CIL然後被組裝成一種所謂的字節碼的形式,並創建一個.NET程序集。
  • 執行.NET程序集時,其代碼將通過運行時的JIT編譯器傳遞以生成本機代碼。也可以使用前期編譯,這消除了這一步驟,但代價是可執行文件可移植性。
  • 本機代碼由計算機的處理器執行。

當我發佈它,那一刻我得到一個安裝程序,它是一個機器代碼或中間代碼?因爲有時安裝程序需要安裝.net。

在.NET .exe總是MSIL碼,安裝程序會爲您的應用程序的先決條件之前安裝.NET Framework。

1

它們都是MSIL代碼,Project\bin\Debug中的可執行文件與您在發佈應用程序時獲得的可執行文件相同,但它們與打開的調試符號鏈接。

+0

所以當我雙擊發布的.exe代碼時,MSIL是由CLR執行的?我的意思是,當我給某人安裝程序時,他們應該使用CLR(.NET)來運行安裝程序? –

+0

您需要運行應用程序的.NET,但安裝程序不需要.NET。您可以讓您的安裝程序包含.NET框架,以便與您的應用程序一起安裝。 – PVitt

2

簡體答案:

當我開發VS一個C#Windows窗體應用程序代碼並運行它,做項目\ BIN \調試\它的擴展名爲「.exe」的文件是一箇中間代碼或機器碼?

它的IL代碼將由.NET當您啓動.exe文件轉換爲二進制/機器碼

,當我發佈了,那一刻我得到一個安裝程序,它是一個機器代碼或中間代碼?因爲有時安裝程序需要安裝.net。

同樣的事情。發佈模式(您應該發佈)和調試模式之間的區別在於前者是優化的,而另一種是爲了使調試更容易。

相關問題