2013-03-19 117 views
1

任何人都可以回答以下問題。我正在使用C#語言。彙編+元數據+彙編語言清單+ MSIL代碼

  1. 我可以將Assembly作爲.ddl或.exe文件調用嗎?
  2. 我可以將Assembly Manifest稱爲程序集嗎?
  3. Assembly,元數據和Assembly Manifest之間有什麼不同?
  4. 我可以說

    .DLL或.EXE =彙編+元數據+集清單+ MSIL代碼。

請幫我清除這些問題。

回答

4

- 一種組件可以單一一個.DLL或.EXE文件,但不是所有.DLL文件和.EXE文件是組件。程序集特定於.NET框架。 .EXE和.DLL程序集都可以被.NET應用程序引用或加載。

- 程序集清單只是程序集的一部分,其中包含描述程序集的元數據。 From MSDN集清單:

  • 枚舉組成組件的文件。

  • 管理如何引用程序集的類型和資源映射到包含其聲明和實現的文件。

  • 枚舉程序集依賴的其他程序集。

  • 在程序集的消費者和程序集的實現細節之間提供間接級別。

  • 呈現程序集自描述。

您可以添加和集清單的某些方面改變,從你的代碼,如果你需要更改與特定組件相關的元數據。程序集清單可以作爲自己的物理文件存儲,但它仍被視爲程序集的一部分。 - 該程序集由CIL代碼,描述由CIL代碼定義的類型的元數據,描述程序集的元數據的程序集清單以及程序集所需的靜態圖像等其他資源組成的元數據組成。因此,程序集清單只是元數據的一部分。

- 差不多。 Assembly = MSIL代碼+程序集清單+類型元數據+資源。

該程序集可以編譯爲.EXE或.DLL文件,但也可以由多個文件組成。

+0

謝謝Jacob。我清楚所有的點。 – 2013-03-21 06:36:35

2

讓我們開始對這些概念(簡單的),那麼我們將有我們的答案
編譯器是語法檢查器和「正確的代碼」分析。在.Net平臺中,無論您使用哪種編譯器的 ,結果都是託管模塊。託管模塊是需要執行CLR的標準 32位Microsoft Windows可移植可執行文件(PE32)文件或標準64位Windows可移植可執行文件(PE32 +)文件。 enter image description here

IL代碼代碼編譯器在編譯源代碼時產生的代碼。在 運行時,CLR將IL編譯爲本機CPU指令。

元數據每個託管模塊都包含元數據表。有兩個主要的 類型的表:描述源代碼中定義的類型和成員 的表以及描述源代碼引用的類型和成員 的表。

裝配是一個抽象的概念,最初可能很難把握。首先,程序集是一個或多個模塊或資源文件的邏輯分組 。其次,程序集是重用,安全性和版本控制的最小單位。根據您使用編譯器或工具所做的選擇,您可以生成一個單個文件或一個多文件程序集。在CLR世界中,程序集就是我們所說的組件。
(CLR的實際上不使用模塊,它與裝配工作)

集清單是組裝是描述者設置文件的組件

enter image description here 的組件可以讓你裏面的一部分分離可重用,可保護,可版本化組件的邏輯和物理概念。程序集的模塊還包含有關引用程序集的信息(包括其版本號)。這些信息使裝配自我描述。換句話說,CLR可以確定程序集的直接依賴性,以便執行程序集中的代碼。
實際上在使用C#編譯器時,生成.DLL或.EXE將使用編譯器選項完成,因此DLL和EXE在裝配概念中是相同的組件。

因此,我們將有
1-正確的,大會是Maneaged DDL(S)或EXE文件
2 - 不,集清單僅僅是組裝
3-部分在答題描述
4-管理.DLL或.EXE =大會(包含元數據+集清單+ MSIL代碼)

圖片和一些報價從jeffrey richter

0

從優秀圖書臨C#5和.NET 4.5框架

當的* .dll或* .EXE已經使用.NET的編譯器創建的,則二進制團塊被稱爲一個 組件

的組件包含MSIL代碼,這在概念上類似於Java字節碼在 它不是編譯爲特定平臺的指令,直到絕對必要的。 通常,「絕對需要」 是由.NET運行時引用的一塊MSIL指令(如方法實現)爲 引用的點。

除了MSIL指令,組件也含有元數據在生動詳細描述了二進制中的每一個的「類型」的 特性。例如,如果您有一個名爲SportsCar的類,則 類型元數據描述了諸如SportsCar的基類的詳細信息,哪些接口由 SportsCar(如果有)實現,以及由SportsCar類型支持的每個成員的完整描述。 .NET 元數據始終存在於程序集中,並且由.NET可識別的 語言編譯器自動生成。

最後,除了MSIL和類型的元數據,組件本身正在使用 元數據,這是正式稱爲清單也有描述。該清單包含有關組件的當前版本,文化信息(用於本地化字符串和圖像資源)以及正確執行所需的所有外部引用程序集的列表 的信息。