溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C#程序集指的是什么

發(fā)布時(shí)間:2021-12-01 11:21:11 來(lái)源:億速云 閱讀:1012 作者:小新 欄目:編程語(yǔ)言

這篇文章主要為大家展示了“C#程序集指的是什么”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“C#程序集指的是什么”這篇文章吧。

一、C#程序集的一些基本概念:

程序集是包含一個(gè)或多個(gè)類(lèi)型定義文件和資源文件的集合。它允許我們分離可重用類(lèi)型的邏輯表示和物理表示。

程序集是一個(gè)可重用、可實(shí)施版本策略和安全策略的單元。它允許我們將類(lèi)型和資源劃分到不同的文件中,這樣程序集的使用者便可以決定將哪些文件打包在一起部署。一旦CLR加載了程序集中包含清單的那個(gè)文件,它就可以確定程序集的其他文件中哪些包含了程序正在引用的類(lèi)型和資源。任何程序集的使用者僅需要知道包含清單的文件名稱(chēng)。文件的劃分對(duì)使用者是透明的,并且可以在將來(lái)改變,同時(shí)又不會(huì)破壞現(xiàn)有應(yīng)用程序的行為。

C#程序集的特性:

1、程序集定義了可重用的類(lèi)型。

2、程序集標(biāo)識(shí)有一個(gè)版本號(hào)。

3、程序集可以包含與之相關(guān)的安全信息。

二、多文件集:

使用多文件集的三個(gè)原因:

1、可以將類(lèi)型分別實(shí)現(xiàn)在不同的文件中,從而允許文件在互聯(lián)網(wǎng)環(huán)境中進(jìn)行增量下載。

2、可以按需要向程序集中添加資源或數(shù)據(jù)文件。(數(shù)據(jù)文件可以是任何格式:文本文件、Excel電子表格、Word表格、或者任何我們喜歡的格式)。

3、可以使我們創(chuàng)建的程序集包含一些用不同編程語(yǔ)言實(shí)現(xiàn)的類(lèi)型。

注意:Visual Studio .NET集成開(kāi)發(fā)環(huán)境(Integrated development environment,簡(jiǎn)稱(chēng)IDE)本身不支持創(chuàng)建多文件程序集,如果需要?jiǎng)?chuàng)建多文件程序集,必須求助于命令行工具。

兩個(gè)源代碼文件:Rut.cs (包含很少使用的類(lèi)型)Fut.cs (包含經(jīng)常使用的類(lèi)型)

csc  /t:module Rut.cs           //生成Rut.netmodule文件  csc  /out:UnionType.dll  /t:library  /addmodule Rut.netmodule  Fut.cs    //生成UnionType.dll類(lèi)庫(kù)文件 Run.netmodule文件作為程序集的一部分來(lái)對(duì)待

三、程序鏈接器:

程序鏈接器:Assembly Linker 即AL.exe

1、使用前提:

如果我們要?jiǎng)?chuàng)建的程序集包含來(lái)自不同編譯器生成的模塊,而使用的編譯器又不支持類(lèi)似于C#中/addmodule那樣的命令行開(kāi)關(guān),或者生成模塊時(shí)還不知道程序集的打包需求,這時(shí)程序集鏈接器就顯得非常有用。

2、使用實(shí)例:

csc /t:module Rut.cs   csc /t:module Fut.cs   al /out: UnionType.dll /t:library Fut.netmodule Rut.netmodule

四、資源文件的添加

1.使用csc.exe來(lái)添加資源文件:

/resource 將把指定的資源文件嵌入到產(chǎn)生的程序集PE文件中,并更新ManifestResourceDef表中的內(nèi)容。

/linkresource 將向ManifestResourceDef和FileDef清單表中添加一條目,使其指向一個(gè)單獨(dú)的資源文件。

2.使用AL.exe來(lái)添加資源文件:

/embed[resource]:該命令行接受任何類(lèi)型的文件,將其內(nèi)容嵌入到產(chǎn)生的PE文件中。同時(shí),清單中的ManifestResourceDef表將被更新以反映該資源的存在。

/link[resource]:該命令將只更新清單中的ManifestResourceDef表和FileDef表,以反映資源的存在,并標(biāo)識(shí)出程序集的哪個(gè)文件包含著資源文件。資源文件本身不會(huì)被嵌入到程序集PE文件中,它仍然保持獨(dú)立,并且須和其它程序一起打包、部署。

3.將Win32資源嵌入到程序集中:

通過(guò)AL.exe或csc.exe添加/win32res命令行開(kāi)關(guān)指定一個(gè).res文件路徑來(lái)實(shí)現(xiàn)。

通過(guò)AL.exe或csc.exe添加/win32icon命令行開(kāi)關(guān)并指定一個(gè).ico文件路徑來(lái)實(shí)現(xiàn)。

五、C#程序集版本信息:

版本號(hào)由四個(gè)部分組成:主版本號(hào)、次版本號(hào)、生成版本號(hào)、修訂版本號(hào)

例:2.5.719.2 主版本號(hào)與次版本號(hào)組成“面向公眾”的版本部分,第三個(gè)版本號(hào)719表示程序集的生成版本,***一個(gè)版本號(hào)2表示對(duì)生成版本的修訂版本。

一個(gè)程序集的三個(gè)相關(guān)版本號(hào):

1、AssemblyFileVersion: 該版本號(hào)存儲(chǔ)在Win32版本資源中,它僅僅是一個(gè)輔助性的信息。

2、AssemblyInformationalVersionAttribute:該版本號(hào)也存儲(chǔ)在Win32版本資源中,僅輔助性作用。

3、AssemblyVersion:該版本號(hào)存儲(chǔ)在AssemblyDef清單元數(shù)據(jù)表中。這個(gè)版本號(hào)非常重要,它用來(lái)惟一地標(biāo)識(shí)一個(gè)程序集。

六、語(yǔ)言文化:

不提倡創(chuàng)建包含代碼的衛(wèi)星程序集,但還是有可能做到。如果我們?cè)敢?,仍然可以用System.Reflection.AssemblyCultureAttribute定制特性來(lái)代替AL.exe的/culture命令行開(kāi)關(guān)來(lái)指定語(yǔ)言文化。示例如下:

//將程序集的語(yǔ)言文化設(shè)置為瑞士德語(yǔ)

[assembly :AssemblyCulture (“de-CH”)]

通常情況下,我們創(chuàng)建的程序集不應(yīng)該引用衛(wèi)星程序集。也就是一個(gè)程序集的AssemblyRef條目指向的都應(yīng)該是語(yǔ)言文化中性的程序集。如果想訪問(wèn)一個(gè)衛(wèi)星程序集中的類(lèi)型或成員,我們應(yīng)該使用反射技巧。

衛(wèi)星程序集:標(biāo)識(shí)著特定語(yǔ)言文件的程序集稱(chēng)為衛(wèi)星程序集。

七、共享程序集:

1..NET框架支持的兩種程序集:

弱命名程序集:Weakly named assembly

強(qiáng)命名程序集:Strongly named assembly

二者之間的真正區(qū)別在于:強(qiáng)命名程序集有一個(gè)發(fā)布者的公鑰/私鑰對(duì)簽名,其中的公鑰/私鑰匙對(duì)惟一地標(biāo)識(shí)了程序集的發(fā)布者。

強(qiáng)命名集包含四個(gè)惟一標(biāo)識(shí)程序集的特性:文件名(沒(méi)有擴(kuò)展名)、版本號(hào)、語(yǔ)言文化標(biāo)識(shí)和一個(gè)公有密鑰標(biāo)識(shí)。

例:”MyTypes,Version=1.0.8123.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”

2.強(qiáng)命名實(shí)用工具:

Strong Name Utility即SN.exe 和.Net框架SDK,以及Visual studio .Net一起發(fā)布的一個(gè)工具。

例:SN –k MyCompany.keys

該命令告訴SN.exe創(chuàng)建一個(gè)名為Mycompany.keys的文件。Mycompany.keys文件將包含一對(duì)以二進(jìn)制格式存儲(chǔ)的公有密鑰和私有密鑰。

查看公有密鑰:(必須執(zhí)行下面兩步)

SN –p MyCompany.keys MyCompany.publickey

SN –tp MyCompany.publickey

創(chuàng)建強(qiáng)命名程序集:

[assembly: AssemblykeyFile ( “MyCompany.keys”)]

3.程序集的兩種部署方式:即私有部署方式和全局部署方式

私有部署方式將程序集部署在應(yīng)用程序的基目錄及其子目錄下,弱命名程序集只能進(jìn)行私有部署。

全局部署方式將程序集部署在一些CLR確知的地方。強(qiáng)命名程序集既可以進(jìn)行私有部署,也可以進(jìn)行全局部署。

4.System.Reflection.AssemblyName類(lèi):

利用它,我們可以很容易地創(chuàng)建一個(gè)程序集名稱(chēng),并獲取一個(gè)程序集名稱(chēng)的各個(gè)部分。公有實(shí)例屬性:如CultureInfo、FullName、KeyPair、Name以及Version.該類(lèi)提供了幾個(gè)公有實(shí)例方法,如GetPublicKey、GetPublicKeyToken、SetPublicKey、以及SetPublicKeyToken。

八、其他

元數(shù)據(jù)標(biāo)識(shí)是一個(gè)4字節(jié)的數(shù)值,其高位字節(jié)表示標(biāo)記的類(lèi)型(0x01 = TypeRef ,0x02 =TypeDef, 0x26 = FileDef , 0x27 = ExportedType)

為使我們創(chuàng)建的C#程序集出現(xiàn)在.NET選項(xiàng)卡的列表中,可以將下面的子鍵添加到注冊(cè)表中:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\

以上是“C#程序集指的是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI