程式集的含義
一.程式集是包括乙個或多個型別定義檔案和資源檔案的集合
.它同意我們分析可重用型別的邏輯表示和物理表示
.相當於你定義了乙個專案xxproject,
專案存在非常多檔案(類
,視窗,介面
,資源等等
),編譯生成乙個
dll檔案
,就是程式集
.當你使用這個程式集的時候,
引用改程式及就能夠得到該程式集裡面的全部東西(類
,視窗,介面
,資源).程式集的特徵例如以下:
1.程式集定義了可重用的型別
2.程式集標識有乙個版本
3.程式集能夠包括與之相關的安全資訊
二.使用程式集的原因
(也就是使用多檔案集的原因
):1.能夠將型別分別實如今不同的檔案裡,
2.能夠依照須要向程式集中加入資源或資料檔案(
資料檔案能夠是任務格式
:文字檔案
,電子**
,word
文件等等
)3.能夠是我們建立的程式集包括一些用不同程式語言實現的型別.
注意:vs.net
計策後功能開發環境本身不支援建立多檔案程式集
,假設須要建立多檔案程式集
,必須求助於命令列工具
.csc /t:module rut.cs //生成
rut.netmodule
檔案 csc /out:uniontype.dll /t:library /addmodule rut.netmodule fut.cs
//生成
uniontype.dll
類庫檔案
run.netmodule
檔案作為程式集的一部分來對待
三.程式鏈結器
程式鏈結器:assembly linker
即al.exe
使用前提:
假設我們要建立的程式集包括來自不同的編譯器生成的模組,而使用的編譯器又不支援類似於c
#中/addmodule
那樣的命令列開關,或者生成模組時還不知道程式集的打包需求,這時程式集鏈結器就顯示很實用。
使用例項:
csc /t:module rut.cs
csc /t:module fut.cs
al /out: uniontype.dll /t:library fut.netmodule rut.netmodule
四.資源檔案的加入
1.使用
csc.exe
來加入資源檔案:
/resource 將把指定的資源檔案嵌入到產生的程式集
pe檔案裡。並更新
manifestresourcedef
表中的內容。
/linkresource 將向
manifestresourcedef
和filedef
清單表中加入一條目。使其指向乙個單獨的資源檔案。
2.使用
al.exe
來加入資源檔案:
/embed[resource]:該命令列接受不論什麼型別的檔案,將其內容嵌入到產生的
pe檔案裡。同一時候,清單中的
manifestresourcedef
表將被更新以反映該資源的存在。
/link[resource]:該命令將僅僅更新清單中的
manifestresourcedef
表和filedef
表,以反映資源的存在,並標識出程式集的哪個檔案包括著資源檔案。資源檔案本身不會被嵌入到程式集
pe檔案裡,它仍然保持獨立。而且須和其他程式一起打包、部署。
3.將win32
資源嵌入到程式集中:
通過al.exe
或csc.exe
加入/win32res
命令列開關指定乙個
.res
檔案路徑來實現。
通過al.exe
或csc.exe
加入/win32icon
命令列開關並指定乙個
.ico
檔案路徑來實現。
五、c#
程式集版本號資訊:
版本由四個部分組成:主版本、次版本、生成版本、修訂版本
例:2.5.719.2
主版本號號與次版本號號組成「面向公眾」的版本號部分,第三個版本號號
719表示程式集的生成版本號,最後乙個版本號號
2表示對生成版本號的修訂版本號。
1、assemblyfileversion
: 該版本號號儲存在
win32
版本號資源中,它不過乙個輔助性的資訊。
2、assemblyinformationalversionattribute
:該版本號號也儲存在
win32
版本號資源中,僅輔助性作用。
3、assemblyversion
:該版本儲存在
assemblydef
清單元資料表中。
這個版本很重要,它用來惟一地標識乙個程式集。
六、語言文化:
不提倡建立包括**的衛星程式集,但還是有可能做到。假設我們願意,仍然能夠用system.reflection.assemblycultureattribute
定製特性來取代
al.exe
的/culture
命令列開關來指定語言文化。示比例如以下:
//將程式集的語言文化設定為瑞士德語
[assembly :
assemblyculture (
「de-ch」)]
通常情況下,我們建立的程式集不應該引用衛星程式集。也就是乙個程式集的assemblyref
條目指向的都應該是語言文化中性的程式集。假設想訪問乙個衛星程式集中的型別或成員,我們應該使用反射技巧。
衛星程式集:標識著特定語言檔案的程式集稱為衛星程式集。
七、共享程式集:
1..net
框架支援的兩種程式集:
弱命名程式集:weakly named assembly
強命名程式集:strongly named assembly
二者之間的真正差別在於:強命名程式集有乙個公布者的公鑰/
私鑰對簽名。當中的公鑰
/私鑰匙對惟一地標識了程式集的公布者。
強命名集包括四個惟一標識程式集的特性:檔名稱(沒有副檔名)、版本、語言文化標識和乙個公有金鑰標識。
例:」mytypes,version=1.0.8123.0,culture=neutral,publickeytoken=b77a5c561934e089
」2.強命名有用工具:
strong name utility即
sn.exe
和.net
框架sdk
。以及visual studio .net
一起公布的乙個工具。
例:sn
–k mycompany.keys
該命令告訴sn.exe
建立乙個名為
mycompany.keys
的檔案。
mycompany.keys
檔案將包括一對以二進位制格式儲存的公有金鑰和私有金鑰。
檢視公有金鑰:(
必須執行以下兩步
)sn –
p mycompany.keys mycompany.publickey
sn –
tp mycompany.publickey
建立強命名程式集:
[assembly: assemblykeyfile ( 「
mycompany.keys」)]
3.程式集的兩種部署方式:即私有部署方式和全域性部署方式
私有部署方式將程式集部署在應用程式的基資料夾及其子資料夾下,弱命名程式集僅僅能進行私有部署。
全域性部署方式將程式集部署在一些clr
確知的地方。
強命名程式集既能夠進行私有部署。也能夠進行全域性部署。
4.system.reflection.assemblyname
類:利用它。我們能夠非常easy地建立乙個程式集名稱,並獲取乙個程式集名稱的各個部分。公有例項屬性:如cultureinfo
、fullname
、keypair
、name
以及version.
該類提供了幾個公有例項方法,如
getpublickey
、getpublickeytoken
、setpublickey
、以及setpublickeytoken
。八、其它
元資料標識是乙個4
位元組的數值。其高位位元組表示標記的型別(
0x01 = typeref ,0x02 =typedef, 0x26 = filedef , 0x27 = exportedtype
)為使我們建立的c#
程式集出如今
.net
選項卡的列表中。能夠將以下的子鍵加入到登錄檔中:
hkey_local_machine\software\microsoft\.netframework\
Lua程式設計(八十三)
lua是一種安全的語言,這意味著不管用lua寫什麼,也不管寫出來的內容有多麼不正確,lua自身所提供的機制總是能用來理解程式的行為。此外,程式中的錯誤 error 也是通過lua語言的機制來檢測和解釋的。與之相對的是,許多c語言 中的錯誤只能從底層硬體的角度來解釋 例如,把異常位置作為指令位址給出 ...
C 高階程式設計十三天 方法的過載
c 支援方法的過載 方法的幾個版本有不同的簽名即可 即 方法名相同 但是引數個數和 或型別不同 為了衝在方法 只需要宣告同名單引數個數或型別不同的方法即可.注意 兩個方法不能僅在返回型別上有區別.兩個方法不能僅根據宣告為ref 還是out 來區分.屬性的概念是 以個方法貨一堆屬性 在客戶端 看來 他...
iOS 高階 第十三天 0414
畫線 圓和圓弧的第二種方法 5中方法畫矩形 第二種畫圖形的方法 之前做的方法都是先把要畫的元素快取到圖形上下文cgconteextref中去,現在第二種方法也快取到cgpath中去.其實圖形上下文本質也是在內部建立乙個cgpath,圖形上下文把所有的元素先快取到cgpath中去,然後cgpath再快...