原创 CLR via C# 讀書筆記1-4 追記

IL 的驗證 IL 提升了程序的強壯性和安全性,當IL 轉換成本地 CPU 指令時, CLR 會進行一個驗證的處理。這個驗證處理保證了 IL 代碼所幹的事情是安全的。比如:每個被調用方法的參數是匹配的,返回值被正確使用,函數結尾有 ret

原创 CLR via C# 讀書筆記1-6

.NET Framework 類庫 .NET Framework 類庫 (FCL),以及Microsoft 提供的其他類庫(Windows Azure SDK, DirectX SDK 等)都包含了許許多多的類型,幫助開發者更便捷地建立各

原创 CLR via C# 讀書筆記1-9

與非託管代碼的互操作 CLR 提供3種與非託管代碼的交互方案: ■ 託管代碼通過使用 P/Invoke 機制 來調用DLL文件中的非託管函數 許多 FCL 中定義的類型內部都有調用到 Kernel32.dll, User32.dll 等等

原创 CLR via C# 讀書筆記2-5

程序集的版本資源信息 使用 AL.exe 或 CSC.exe 生成的程序集都會包含一個標準 Win32 版本資源,通過查看這個文件的屬性可以查看該信息,也可以在程序代碼中調用System.Diagnostics.FileVersionIn

原创 CLR via C# 讀書筆記2-4

從模塊到程序集 前文的 Program.exe 不僅是一個包含元數據的 PE 文件,也是一個程序集。所謂的程序集是一個或多個包含類型定義或資源的文件的集合。程序集中的一個文件被用來存放 manifest,這個 manifest 是另一個元

原创 CLR via C# 讀書筆記1-7

通用類型系統 Common Type System (CTS) CLR 中的各種類型扮演了最終要的角色,它們決定了一種程序語言與另一種程序語言交互的機制。基於此點 Microsoft 建立一個規範—通用類型系統 Common Type S

原创 CLR via C# 讀書筆記2-2

把類型編譯成一個模塊 先假設有這麼一個簡單的程序: public sealed class Program { public static void Main() { System.Console.WriteLine("Hi"

原创 CLR via C# 讀書筆記1-5

本地代碼生成器: NGen.exe NGen.exe 能把 IL 代碼變異爲本地代碼,這使得在運行時 CLR 的 JIT 編譯器不需要在運行時編譯 IL 代碼從而提高運行效率。NGen.exe 適用以下兩個場景: ■ 提高程序的啓動速度

原创 CLR via C# 讀書筆記1-3

載入 Common Language Runtime CLR 負責託管代碼的執行,所以在運行的機器上必須安裝有.NET Framework。可以通過在 %SystemRoot%\System32 目錄中是否存在 MSCorEE.dll 文

原创 CLR via C# 讀書筆記2-3

初識元數據(Metadata) 前文已經介紹過,編譯後生成的託管文件包含4 部分內容:PE32(+) 頭,CLR 頭,元數據以及 IL 代碼。 metadata 是一塊包含若干個表的二進制數據,這些標分爲3 種類別: 定義表(defini

原创 CLR via C# 讀書筆記1-4

運行程序集代碼 託管程序集由 metadata 和 IL 組成,IL 是一種不依賴 CPU 的機器語言,相對大多數的 CPU 機器語言來說,它屬於高級語言。它可以建立/初始化對象,調用虛擬方法,直接操作數組,甚至進行錯誤捕獲等,你可以把它

原创 CLR via C# 讀書筆記2-6

Culture 程序集包含有 culture 信息,並作爲其標示的一部分,程序集能被限定爲某一特定的 culture (German, US English 等等),Culture 使用一個字符串(RFC 1766)來標示。 通常一個僅包

原创 在 Visual Studio 中調試 MSBuild 腳本

原文地址: Debugging MSBuild script with Visual Studio   調試步驟 在開始之前,先打開 Visual Studio 的設定,確認 "Just My Code" 被勾上:   調試前準備 首

原创 CLR via C# 讀書筆記1-1

CLR via C# 讀書筆記1-1 把源代碼編譯爲託管模塊 (Managed Modules) 進行開發之前,你首先需要選擇你擅長的語言。某些時候這很難抉擇,因爲不同的開發語言提供不同的開發特性。例如:非託管 C/C++ 提供了操作系統

原创 CLR via C# 讀書筆記2-1

.NET Framework 開發的目標 原先的Windows程序有以下3個不足: 採用的 dynamic-link libraries (DLLs) 方式在升級後經常對已有程序造成影響,被戲稱爲 “DLL hell”。 安裝一個程序的時