C#程式集Assembly學習隨筆(第一版)_AX

來源:互聯網
上載者:User
①什麼是程式集?
可以把程式集簡單理解為你的.NET項目在編譯後產生的*.exe或*.dll檔案.
嗯,這個確實簡單了些,但我是這麼理解的.詳細:
http://blog.csdn.net/sws8327/archive/2006/09/21/1244642.aspx

②程式集和命名空間的區別?
一個程式集可以跨越n個命名空間,一個命名空間也可以包含n個程式集.(估計你該暈了)

如果說命名空間是類庫的邏輯組織形式,那麼程式集就是類庫的物理組織形式。只有同時指定類型所在的命名空間及實現該類型的程式集,才能完全限定該類型。(摘抄自《精通.NET核心技術--原來與架構》   電子工業出版社)

也就是說,你要建立一個類的執行個體,必須知道該類的  命名空間(這個一般都知道)+程式集(這個很容易被我們忽略,因為一般我們不需要引用外部的程式集,如果你用C#做過Excel檔案的匯入匯出,就會知道必須添加一個Excel相關的程式集引用)

③怎樣通過命令列建立程式集?
我對命令列向來反感,如果你想知道,look here:
http://www.cnblogs.com/3echo/archive/2006/02/14/330579.html

④我怎麼把項目和程式集聯絡起來理解?
一個項目對應一個程式集.項目名與程式集名相同(03版,05版亂七八糟,隨機產生的程式集名).
一般的我們每建立一個.NET項目(ASP.NET(VS2005裡沒有),WinForm,類庫,控制台等),IDE都會自動產生一個AssemblyInfo.cs的檔案,開啟看看(03版) 

1using System.Reflection;
 2using System.Runtime.CompilerServices;
 3
 4//
 5// 有關程式集的常規資訊是通過下列
 6// 屬性集控制的。更改這些屬性值可修改與程式集
 7// 關聯的資訊。
 8//
 9[assembly: AssemblyTitle("")]
10[assembly: AssemblyDescription("")]
11[assembly: AssemblyConfiguration("")]
12[assembly: AssemblyCompany("")]
13[assembly: AssemblyProduct("")]
14[assembly: AssemblyCopyright("")]
15[assembly: AssemblyTrademark("")]
16[assembly: AssemblyCulture("")]        
17
18//
19// 程式集的版本資訊由下列 4 個值組成:
20//
21//      主要版本
22//      次版本 
23//      組建號
24//      修訂編號
25//
26// 您可以指定所有這些值,也可以使用“修訂編號”和“組建號”的預設值,方法是按
27// 如下所示使用 '*':
28
29[assembly: AssemblyVersion("1.0.*")]
30
31//
32// 要對程式集進行簽名,必須指定要使用的密鑰。有關程式集簽名的更多資訊,請參考 
33// Microsoft .NET Framework 文檔。
34//
35// 使用下面的屬性控制用於簽名的密鑰。
36//
37// 注意:
38//   (*) 如果未指定密鑰,則程式集不會被簽名。
39//   (*) KeyName 是指已經安裝在電腦上的
40//      密碼編譯服務提供者(CSP)中的密鑰。KeyFile 是指包含
41//       密鑰的檔案。
42//   (*) 如果 KeyFile 和 KeyName 值都已指定,則 
43//       發生下列處理:
44//       (1) 如果在 CSP 中可以找到 KeyName,則使用該密鑰。
45//       (2) 如果 KeyName 不存在而 KeyFile 存在,則 
46//           KeyFile 中的密鑰安裝到 CSP 中並且使用該密鑰。
47//   (*) 要建立 KeyFile,可以使用 sn.exe(強式名稱)工具 + 生產力。
48//       在指定 KeyFile 時,KeyFile 的位置應該相對於
49//       項目輸出目錄,即
50//       %Project Directory%\obj\<configuration>。例如,如果 KeyFile 位於
51//       該項目目錄,應將 AssemblyKeyFile 
52//       屬性指定為 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
53//   (*) “延遲簽名”是一個進階選項 - 有關它的更多資訊,請參閱 Microsoft .NET Framework
54//       文檔。
55//
56[assembly: AssemblyDelaySign(false)]
57[assembly: AssemblyKeyFile("")]
58[assembly: AssemblyKeyName("")]
59

汗,,[assembly: AssemblyTitle("")],,,,竟然程式集名是空的....不過你從該項目的檔案夾裡確實能翻出與項目名相同的.dll檔案.估計如果你不在這條語句裡賦值,IDE預設產生的程式集與項目名相同.大膽用吧.(可是,我不知道怎麼用程式集?敬請期待下一篇:C#反射Reflection學習隨筆_AX)

⑤自知,我的解決方案(包含0~n個項目)用到了什麼程式集?                //遍曆訪問當前應用程式定義域的程式集Assemble
                foreach (Assembly assem in AppDomain.CurrentDomain.GetAssemblies())
                {
                    //反射當前程式集的資訊
                    Response.Write("Assembly:"+assem.FullName+"<br>");
                }

⑥我們苦苦尋覓的Assembly裡面到底是什麼東西?有什麼值得我們去苦苦探究的?
其實在上面的AssemblyInfo.cs代碼中,我們已經看出來一些東西,它裡麵包含該Assembly的名稱/產品/描述/拷貝權..(鬼才關心)和版本號碼(這個很重要,但我覺得還是沒什麼太大的用處,是dll Hell 的剋星,順帶說一句,同一Assembly名稱的不同版本號碼的Assembly可同時運行),還有一個密鑰的概念,共用組件和部署用的,看了半天沒看明白,就不誤人子弟了. 
那Assembly的主要用處是:
ⅰ與反射Reflection結合起來用,動態建立你所需要的類!!
ⅱ與反射Reflection結合起來用,獲得Assemble裡類的資訊
(據可靠的小道訊息說Assembly裡存的是一張包含中繼資料類名什麼的表)
ⅲ使用別人已封裝好的類.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.