首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

CLR 筆記:建構、封裝、部署與管理應用程式

     編輯:關於.NET

2.1 .NET Framework 部署目標

解決非 .NET 程式三大痛點:DLL Hell、安裝複雜(目錄分散、登錄、捷徑)、安全性(惡意碼悄悄下載)。

2.2 將類型整合至模組——編譯器 csc

csc /out:Program.exe /t:exe /r:Mscorlib.dll Program.cs
  • C# 自動引用 Mscorlib.dll,可省略 /r。
  • 預設產生 EXE (CUI),/t:exe 可省略;DLL (/t:library) 與 GUI (/t:winexe) 不可省略。
  • 預設輸出 Program.exe,/out 可省略。精簡為 csc Program.cs。
  • 不想自動引用 Mscorlib 用 /nostdlib。
  • /t = /target,/r = /reference。
  • /reference 搜尋順序:工作目錄 → 系統目錄 → /lib 目錄 → LIB 環境變數目錄。

應答檔:包含編譯器命令列開關,csc @MyProject.rsp Program.cs。搜尋順序:目前目錄 → 系統目錄。/noconfig 忽略 rsp 檔。

2.3 中繼資料概觀

三類資料表:定義表、引用表、資訊清單表。常見定義表:ModuleDef, TypeDef, MethodDef, FieldDef, ParamDef, PropertyDef, EventDef。常見引用表:AssemblyRef, ModuleRef, TypeRef, MemberRef。常見清單表:AssemblyDef, FileDef, ManifestResourceDef, ExportedTypesDef。

2.4 合併模組構成組件

CLR 優先載入含資訊清單的檔案,再用清單載入其他檔案。使用多檔案組件三理由:按類別劃分型別、加入資源/資料檔案(AL.exe)、不同語言實作型別再用 ILAsm 產生 IL。

  • csc /t:module A.cs 產生無清單的模組檔 A.netmodule。
  • csc /out:FinalAssembly.dll /t:library /addmodule:A.netmodule B.cs 附加至有清單的組件(B.cs 含清單)。執行期 A.netmodule 可不存在,僅呼叫其方法時載入。
  • VS2005 不支援建立多檔案組件。
  • VS2005 加入參考「.NET 選項」對應登錄機制。
  • IL Token 編碼:0x26000001 (行號 1, 0x26=FileRef);0x01=TypeRef, 0x02=TypeDef, 0x03=AssemblyRef, 0x27=ExportedType。

AL.exe 組件連結器:產生僅含清單的 DLL(無 IL)。AL /out:FinalAssembly.dll /t:library /addmodule:A.netmodule B.netmodule。可產生 EXE 需 /main 指定進入點。資源檔案開關:/embed[resource] (內嵌)、/link[resource] (連結)、/win32res, /win32icon。

2.5 組件版本資源資訊

System.Diagnostics.FileVersionInfo.GetVersionInfo 取得。VS2005 存放於 AssemblyInfo.cs。AL 可用開關配置(詳見書本)。

2.6 文化特性

附屬組件:以具體文化特性標記的組件。AL /culture:text (如 en-US, zh-CN) 或組件屬性 [assembly:AssemblyCulture("en-US")]。用 System.Resources.ResourceManager 存取附屬組件資源。

2.7 簡單應用程式部署

私有部署:組件部署在應用程式相同目錄。

2.8 簡單管理控制

CLR 定位組件 A(中性文化):依設定檔 privatePath 順序掃描:AppDir\AsmName.dll → AppDir\AsmName\AsmName.dll → AppDir\firstPrivatePath\AsmName.dll → ... 找不到再找 .exe。附屬組件同規則,目錄加文化名稱(en-US → en)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved