共用方式為


IMetaDataEmit::MergeEnd 方法

更新:2007 年 11 月

將之前的一或多個 IMetaDataEmit::Merge 呼叫所指定的所有中繼資料範圍合併到目前的範圍中。

HRESULT MergeEnd ();

參數

這個方法不採用參數。

備註

這個常式會觸發之前 IMetaDataEmit::Merge 呼叫所指定之所有匯入範圍的中繼資料實際合併至目前的匯出範圍中。

下列特殊條件適用於此合併:

  • 絕不匯入模組版本識別項 (MVID),因為它對匯入範圍的中繼資料是唯一的。

  • 不覆寫現有模組範圍的屬性。

    如果目前範圍已設定模組屬性,則不會匯入模組屬性。不過,如果目前範圍中尚未設定模組屬性,只會在第一次遇到模組屬性時匯入一次。如果再次遇到模組屬性,它們就是重複的項目。如果比較所有模組屬性的值 (MVID 除外) 而且找不到重複的項目,則會引發錯誤。

  • 對於型別定義 (TypeDef),不會將重複項目合併至目前範圍中。針對每個 fully-qualified object name + GUID + version number,檢查 TypeDef 物件是否有重複項目。如果名稱或 GUID 有相符項目,而且其他兩個元素的任何一個是不同的,則會引發錯誤。否則,如果所有三個項目都符合,MergeEnd 便會執行快速檢查,以確定項目確實重複,否則會引發錯誤。這項快速檢查會尋找:

    • 以相同順序發生的相同成員宣告。標幟為 mdPrivateScope (請參閱 CorMethodAttr 列舉型別) 的成員不包含在此檢查中,而是以特殊方式合併。

    • 相同的類別配置。

    這表示 TypeDef 物件必須在其宣告所在的每個中繼資料範圍中完全一致地定義,如果它的成員實作 (對於類別) 分散在多個編譯單位,則假設完整定義出現在每個範圍中,而非累加至每個範圍。例如,如果參數名稱與合約相關,則這些參數名稱必須以相同方式發出至每個範圍,如果不相關,則不會發出至中繼資料。

    例外是 TypeDef 物件的累加成員可以標幟為 mdPrivateScope。在遇到這些累加成員時,MergeEnd 會將它們累加至目前範圍,而不考慮重複項目。因為編譯器了解私用範圍,所以編譯器必須負責強制執行規則。

  • 系統不會匯入或合併相對虛擬位址 (RVA),因此預期編譯器應重新發出此資訊。

  • 只有在合併附加的項目時,才會合併自訂屬性。例如,與類別關聯的自訂屬性會在第一次遇到此類別時合併。如果自訂屬性與編譯單位特定的 TypeDefMemberDef (例如成員編譯的時間戳記) 相關聯,則不會合併這些自訂屬性,而是由編譯器決定移除或更新這種中繼資料。

需求

**平台:**請參閱 .NET Framework 系統需求

**標頭:**Cor.h

**程式庫:**當做 MSCorEE.dll 中的資源使用

**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1

請參閱

參考

IMetaDataEmit

IMetaDataEmit2