Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
operacja metadanych nie powiodła się (HRESULT): error_message
Konsolidator wykrył błąd podczas scalania metadanych. Aby pomyślnie połączyć błędy metadanych, należy rozwiązać problem.
Jednym ze sposobów zdiagnozowania tego problemu jest uruchomienie tokenów ildasm na plikach obiektów w celu znalezienia typów, które mają tokeny wymienione w error_messagepliku i poszukaj różnic. W metadanych dwa różne typy o tej samej nazwie są nieprawidłowe, nawet jeśli atrybut LayoutType jest inny.
Jedną z przyczyn LNK2022 jest to, że typ (taki jak struktura) istnieje w wielu współzadaniach o tej samej nazwie, ale z definicjami powodujących konflikt i podczas kompilowania z /clr. W takim przypadku upewnij się, że typ ma identyczną definicję we wszystkich kompilands. Nazwa typu znajduje się na liście .error_message
Inną możliwą przyczyną LNK2022 jest znalezienie pliku metadanych w innej lokalizacji niż określono kompilatorowi przy użyciu #using. Upewnij się, że plik metadanych (.dll lub .netmodule) znajduje się w tej samej lokalizacji po przekazaniu do konsolidatora, tak jak w przypadku przekazania go do kompilatora.
Podczas kompilowania aplikacji ATL użycie makra _ATL_MIXED jest wymagane we wszystkich kompilands, jeśli jest ono używane w co najmniej jednym.
Przykłady
Poniższy przykład definiuje pusty typ.
// LNK2022_a.cpp
// compile with: /clr /c
public ref class Test {};
W tym przykładzie pokazano, że nie można połączyć dwóch plików kodu źródłowego, które zawierają typy o tej samej nazwie, ale różne definicje.
Poniższy przykład generuje LNK2022.
// LNK2022_b.cpp
// compile with: LNK2022_a.cpp /clr /LD
// LNK2022 expected
public ref class Test {
void func() {}
int var;
};