標籤:.net 檔案夾 codebase deb 簽名 程式集 開發 尋找 framework
1. .NET運行機制
1.1 .NET程式被編譯成什麼形式的代碼?
.NET程式在第一次編譯後,形成CLR頭、中繼資料和中間代碼。在實施或者部署時,將經過第二次編譯,編譯的結果是在CLR中形成可執行檔機器代碼。
1.2 JIT是如何工作的?
JIT(Just-In-Time 編譯)引擎在編譯中間代碼之前,會尋找方法的本機機器代碼緩衝並且判斷其是否可用,如果可用則直接載入,如果不可用,JIT引擎會尋找類型中的方法存根,找到該中間代碼並且進行編譯。
1.3 簡述程式集的載入機制
CLR通過System.Reflection.Assembly.LoadForm和System.Reflection.Assemblty.Load來主動地載入程式集。前者通過位置而後者通過唯一標識強命名程式集的四個元素來標識程式集。CLR的載入機制和Load方法一致,其內在策略是依次通過版本原則、CODEBASE位置、應用程式定義域位置和應用程式位置來尋找程式集。
2. 如何配置程式集的版本原則?
CLR支援在3個層級上設定版本原則,依次是:應用程式策略、發行者策略和電腦策略。所有策略的設定都是通過修改設定檔來實現。3個層級的策略依次會被CLR執行,而上一個策略的執行結果將被作為下一個策略的輸入。發行者策略僅僅針對那些 放入GAC(全域組件快取)的程式集,並且可以在應用程式策略中被指定忽略。
3.產生、部署和管理(*)
3.1 如何產生強簽名的程式集?
產生強簽名的程式集需要有公開金鑰/私密金鑰對後,就可以控制編譯器的輸入參數來得到一個強簽名的程式集。對於C#的編譯器csc.exe來說,可以用/keyfile參數來制定使用那個公開金鑰/私密金鑰檔案。
3.2 如何把程式集放入GAC中
GAC是一個具有特定目錄結構的檔案夾,所有強簽名的程式集都可以被放入GAC中。可以通過.NET Framework內建的assembly viewer來簡單地拖動添加一個程式集到GAC中,也可以利用諸如gacutil.exe等工具使用命令列來添加。總之,任何方法都是根據GAC的規範和程式集本身的特性,在GAC目錄下簡曆相應的子目錄結構。
3.3 延遲簽名及其作用
延遲簽名就是把對強簽名程式集的私密金鑰加密和數位簽章延遲到實際發布時進行。延遲簽名提高了開發測試階段的效率,也方便了機構和項目組管理自己的私密金鑰。
3.4 程式集的版本分哪幾個部分
程式集的版本號碼分為四個部分:主要版本號、此版本號碼、組建號和修改號。
.NET100問(.NET架構基礎)