2012-02-23 64 views
7

我正在學習.NET框架並正在通過閱讀元數據清單元數據和清單之間的區別

「元數據是關於數據的數據,而Manifest是關於程序集的數據!」

問:那麼是不是清單元數據?

那麼它有什麼不同?

+0

引用聲明質量有問題。它在.NET的特定上下文中給出了「清單」的定義,但是對於術語「元數據」卻沒有做同樣的事情,而是回到了對這個詞的非常一般的定義,這對.NET並沒有什麼幫助。在.NET中,「元數據」通常意味着「嵌入在程序集中的信息,關於在該程序集中定義或引用的所有類型及其成員」的信息。你引用的來源是什麼? – stakx 2016-07-18 10:30:01

回答

13

清單維護有關組件 的信息,如版本,名稱區域設置和唯一標識程序集的可選強名稱。此清單 信息由CLR使用。清單還包含 驗證此程序集的安全性要求。它也 包含組成 大會的所有文件的名稱和散列。 .NET程序集清單包含程序集中不同模塊的加密哈希。 裝載程序集時,CLR會重新計算當前模塊的散列值,並將其與嵌入散列值 進行比較。如果在運行時生成的散列與清單中發現的散列不同,則 與.NET不同,但.NET拒絕加載 程序集並引發異常。

元數據表示有關數據的數據。元數據產生該組件中可用的 類型,即,類,接口,枚舉,結構等及其包含的名稱空間,每個類型的名稱,其可見性/範圍,其基類,它實現的接口,其方法和範圍,以及每個方法的參數,類型的屬性等等。 彙編元數據由高級 編譯器根據源文件自動生成。編譯器 在多模塊 程序集的情況下將元數據嵌入到目標輸出文件,dll, .exe或.netmodule中。

+0

因此是否顯示元數據? – 2012-02-23 05:00:37

+2

嘗試回答問題或建議鏈接到可以獲得尊重答案的地方。避免複製粘貼! – 2012-02-23 05:09:04

+1

否Mastero Manifest不是元數據......,Manifest在更高級別上工作;我在彙編級別檢查它們的強名稱,版本和全部,並且接受程序集或根據生成的哈希代碼拒絕它。 元數據是所有關於類,接口等信息,正如我在答案中所建議的。 希望你這次得到了一些方法.. :-) – 2012-02-28 04:42:14

0

"Programming .NET Components, Second Edition" By Juval Lowy published by O'Reilly第39頁第一段:

元數據:

元數據是描述什麼是.NET程序集的完整方法。 挖掘元數據會得到該程序集中可用的類型,即 即。類,接口,枚舉,結構等及其包含的名稱空間,每個類型的名稱,其可見性/範圍,其基類 類,其實現的接口,方法及其範圍,以及每個方法的參數,類型的屬性,等等。彙編程序 metada是由高級編譯器自動從 源文件生成的。在多模塊 程序集的情況下,編譯器將元數據嵌入到目標輸出 文件,dll,.exe或.netmodule中。在包含IL的多模塊組裝模塊的情況下,必須在其中嵌入元數據以描述該模塊中的類型 。每個編譯器針對的是。NET CLR需要 來生成元數據並將其嵌入到輸出文件中,並且該元數據必須採用標準格式。 .NET反射廣泛地使用 動態地使用元數據信息知道類型信息 。

元數據是託管程序集中的附加信息,它描述類型,類型名稱,方法名稱等(基本上可以從Reflection服務檢索到的信息)。有關更多詳細信息,請參見http://msdn2.microsoft.com/en-us/library/ms404430.aspx

集清單:

元數據描述在一個組件中的內容,而所述清單 描述了組件本身,提供邏輯屬性通過在組件的所有模塊和所有組件共享 。清單 包含程序集名稱,版本號,區域設置和唯一標識程序集的可選強名稱。此清單 信息由CLR使用。該清單還包含用於驗證此程序集的安全性要求。它還包含構成程序集的所有文件的名稱 和哈希。 .NET 程序集清單包含程序集中不同模塊 的加密哈希。當程序集加載時,CLR重新計算當前模塊的哈希值,並將其與嵌入的 哈希值進行比較。如果在運行時生成的散列與在清單 中找到的散列不同,則.NET拒絕加載程序集並拋出異常。這與COM不同,在COM下 可以通過運行 茂密的代碼將一個原始DLL或EXE文件與另一個文件(具有相同類型 庫/接口)交換並導致系統損壞。清單也由 彙編程序從 程序集中所有模塊的源文件中自動生成。清單僅嵌入到一個物理文件中,並且僅嵌入一次 ,因爲它對於程序集中的所有模塊都很常見,而 元數據需要嵌入所有模塊。 .NET CLR兼容 編譯器必須生成清單,並且它應該採用標準的 格式。使用清單.NET捕獲有關其他 引用程序集的信息。這確保了版本兼容性,並且程序集可以與其期望的其他組件的確切信任集進行交互。該清單包含每個引用的程序集名稱,其公鑰(如果有強名稱),其版本號爲 的數字和區域設置。運行此程序集時,.NET保證僅使用這些特定的程序集,並且只加載兼容的 版本。

「Manifest」是一個非常超載的術語。在.NET中,「程序集清單」是程序集中描述版本控制內容的一些元數據。請參閱http://msdn2.microsoft.com/en-us/library/1w45z383.aspx瞭解更多詳情。

你可以閱讀更多有關裝配清單here

有關的元數據整體裝配和模塊被稱爲清單

+1

這是一個很好的做法,包括報價來源。是[this](http://kamleshsingh.wetpaint.com/page/Assembly+manifest,metadata)? – 2012-02-23 10:11:25

+0

抱歉。讓我再檢查一次。因爲我整天都在用Google搜索,發現了一些可以理解的東西。 – 2012-02-23 10:13:51

+0

來源:dotNetFunda和MSDN – 2012-02-23 10:24:59

0

元數據描述在裝配中的內容,而清單描述大會本身,提供由所有模塊和程序集中的所有組件共享的邏輯屬性。清單包含程序集名稱,版本號,區域設置和唯一標識程序集的可選強名稱。

3

清單:它存儲關於CLR加載程序集所需的程序集信息(如程序集名稱,版本等)。

元數據:它存儲象方法名組件的細節,它的成員等代碼轉換爲MSIL時自動由編譯器生成

兩個文件。

6

這是最簡單的答案。

彙編:組成您的程序的一個或多個文件。通常是Exe或dll或這些文件和其他文件的組合

元數據:包含兩個 1)組裝元數據2)類型元數據。它包含程序集的名稱,版本,文化,強名稱信息,引用的程序集信息...等等。

2)類型元數據是導出的數據類型和程序集的方法。

enter image description here