連結器工具錯誤 LNK2022
元資料作業失敗 (HRESULT) : error_message
連結器在合併元數據時偵測到錯誤。 元數據錯誤必須解決才能成功連結。
診斷此問題的其中一個方法是在物件檔案上執行 ildasm -tokens ,以尋找哪些類型有所列 error_message
的令牌,並尋找差異。 在元數據中,具有相同名稱的兩個不同類型無效,即使 Just LayoutType 屬性不同也一樣。
LNK2022的其中一個原因是類型(例如結構)存在於多個具有相同名稱的編譯中,但定義衝突,以及當您使用 /clr 編譯時。 在此情況下,請確定類型在所有編譯和中都有相同的定義。 類型名稱會列在 中 error_message
。
LNK2022的另一個可能原因是當連結器在與編譯程式指定不同的位置找到元數據檔案時(使用 #using )。 確保中繼資料檔 (.dll 或 .netmodule) 所在位置是與傳遞給連結器時相同,也與傳遞給編譯器時相同。
建置 ATL 應用程式時,如果巨集 _ATL_MIXED
至少用於一個編譯程式,則需要在所有編譯和中使用巨集。
範例
下列範例會定義空型別。
// LNK2022_a.cpp
// compile with: /clr /c
public ref class Test {};
此範例顯示您無法連結兩個原始碼檔案,其中包含相同名稱但不同的定義類型。
下列範例會產生LNK2022。
// LNK2022_b.cpp
// compile with: LNK2022_a.cpp /clr /LD
// LNK2022 expected
public ref class Test {
void func() {}
int var;
};