成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學(xué)習(xí)C#程序集

開(kāi)發(fā) 后端
本文介紹了C#程序集的基本概念、多文件集、程序鏈接器及資源文件的添加等內(nèi)容。

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

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

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

C#程序集的特性:

1、程序集定義了可重用的類型。

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

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

二、多文件集:

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

1、可以將類型分別實(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)的類型。

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

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

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

三、程序鏈接器:

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

1、使用前提:

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

2、使用實(shí)例:

  1. csc /t:module Rut.cs  
  2.  
  3. csc /t:module Fut.cs  
  4.  
  5. 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]:該命令行接受任何類型的文件,將其內(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è)敢猓匀豢梢杂肧ystem.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)星程序集中的類型或成員,我們應(yīng)該使用反射技巧。

衛(wèi)星程序集:標(biāo)識(shí)著特定語(yǔ)言文件的程序集稱為衛(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類:

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

八、其他

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

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

【編輯推薦】

  1. C#事件和委托的編譯代碼
  2. C#事件的由來(lái)
  3. 學(xué)習(xí)C#委托:將方法綁定到委托
  4. 學(xué)習(xí)C#委托:將方法作為方法的參數(shù)
  5. C# 插件構(gòu)架實(shí)例詳解
責(zé)任編輯:book05 來(lái)源: csdn
相關(guān)推薦

2009-09-01 17:17:48

C#命名空間和程序集

2009-08-20 17:49:53

學(xué)習(xí)C#程序

2009-08-24 15:46:46

C# SmartPho

2009-09-11 09:13:34

2009-08-24 16:02:10

C# Windows應(yīng)

2009-08-13 17:04:09

C#語(yǔ)言C#程序

2022-01-12 06:59:02

C#程序集裝載

2009-08-27 16:11:03

C# delegateC# event

2009-08-24 09:55:26

C#接口轉(zhuǎn)換

2009-08-24 11:02:52

C#接口映射

2009-09-11 10:44:55

C#語(yǔ)言

2009-08-12 09:28:36

C# WiteOne

2009-08-13 18:21:52

C#學(xué)習(xí)筆記

2009-08-20 15:02:57

C# If語(yǔ)句

2009-08-24 10:31:37

C#接口繼承

2009-08-12 15:50:40

C# ListBox

2011-06-17 16:18:18

C#

2009-08-12 17:44:30

C# Web Serv

2009-08-12 18:28:09

C#事件處理程序

2009-08-13 17:15:44

C#屏幕保護(hù)程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 瑞克和莫蒂第五季在线观看 | 久久亚洲欧美日韩精品专区 | 国产中文字幕在线观看 | 欧美一级在线观看 | 国产午夜精品久久久久免费视高清 | 日韩精品一区二区三区中文字幕 | 精品久久久久久久人人人人传媒 | 日日夜夜操天天干 | 成人在线视频网 | 亚洲狠狠爱 | 欧美一级欧美一级在线播放 | 瑟瑟激情| 在线一区二区三区 | 嫩草伊人| 综合一区| 亚洲一二三区精品 | 免费国产视频 | 日本 欧美 国产 | 欧美亚洲另类在线 | 在线观看国产视频 | 免费在线观看av | 国产高清视频一区 | 欧美日韩国产不卡 | 久久一区二区视频 | 99精品免费视频 | 久久免费精品 | 亚洲视频一区在线观看 | 国产精品久久久久久久久免费高清 | 日韩av在线免费 | 中国美女一级黄色片 | 蜜桃av一区二区三区 | 91视频在线| 国产在线精品一区二区 | www.久| 日韩视频在线免费观看 | 91免费观看视频 | 黄色毛片在线观看 | 国产精品毛片一区二区三区 | 视频二区在线观看 | 精品视频一区二区 | 特一级毛片|