Freigeben über


Compilerwarnung (Ebene 1) C4691

'type' : Typ, auf den verwiesen wird, wurde in nicht referenzierter Assembly "datei" erwartet, typ, der in der aktuellen Übersetzungseinheit definiert wurde.

Auf die Metadatendatei, die die ursprüngliche Typdefinition enthält, wird nicht verwiesen, und der Compiler verwendet eine lokale Typdefinition.

In dem Fall, in dem Sie die Datei neu erstellen, kann C4691 mit pragma-Warnung ignoriert oder deaktiviert werden. Das heißt, wenn die datei, die Sie erstellen, mit der Datei identisch ist, in der der Compiler erwartet, dass die Typdefinition gefunden wird, können Sie C4691 ignorieren.

Unerwartetes Verhalten kann jedoch auftreten, wenn der Compiler eine Definition verwendet, die nicht aus derselben Assembly stammt, auf die in Metadaten verwiesen wird; CLR-Typen werden nicht nur durch den Namen des Typs, sondern auch durch die Assembly eingegeben. Das heißt, ein Typ Z von assembly z.dll unterscheidet sich von einem Typ Z von assembly y.dll.

Beispiele

Dieses Beispiel enthält die ursprüngliche Typdefinition.

// C4691_a.cpp
// compile with: /clr /LD /W1
public ref class Original_Type {};

In diesem Beispiel wird auf C4691_a.dll verwiesen und ein Feld vom Typ Original_Type deklariert.

// C4691_b.cpp
// compile with: /clr /LD
#using "C4691_a.dll"
public ref class Client {
public:
   Original_Type^ ot;
};

Im folgenden Beispiel wird C4691 generiert. Beachten Sie, dass dieses Beispiel eine Definition für Original_Type enthält und nicht auf C4691a.dll verweist.

Zum Auflösen verweisen Sie auf die Metadatendatei, die die ursprüngliche Typdefinition enthält, und entfernen Sie die lokale Deklaration und Definition.

// C4691_c.cpp
// compile with: /clr /LD /W1
// C4691 expected

// Uncomment the following line to resolve.
// #using "C4691_a.dll"
#using "C4691_b.dll"

// Delete the following line to resolve.
ref class Original_Type;

public ref class MyClass : Client {};