Avviso del compilatore (livello 1) C4691
'type': il tipo a cui si fa riferimento era previsto nell'assembly non referenziato 'file', il tipo definito nell'unità di conversione corrente usata invece
Il file di metadati contenente la definizione del tipo originale non viene fatto riferimento e il compilatore usa una definizione di tipo locale.
Nel caso in cui si ricompila il file, C4691 può essere ignorato o disattivato con l'avviso pragma. Ovvero, se il file che si sta compilando è uguale al file in cui il compilatore prevede di trovare la definizione del tipo, è possibile ignorare C4691.
Tuttavia, un comportamento imprevisto può verificarsi se il compilatore usa una definizione che non proviene dallo stesso assembly a cui viene fatto riferimento nei metadati; I tipi CLR vengono tipiati non solo dal nome del tipo, ma anche dall'assembly. Ovvero, un tipo Z dall'assembly z.dll è diverso da un tipo Z rispetto all'assembly y.dll.
Esempi
Questo esempio contiene la definizione del tipo originale.
// C4691_a.cpp
// compile with: /clr /LD /W1
public ref class Original_Type {};
Questo esempio fa riferimento C4691_a.dll e dichiara un campo di tipo Original_Type.
// C4691_b.cpp
// compile with: /clr /LD
#using "C4691_a.dll"
public ref class Client {
public:
Original_Type^ ot;
};
L'esempio seguente genera l'errore C4691. Si noti che questo esempio contiene una definizione per Original_Type e non fa riferimento a C4691a.dll.
Per risolvere il problema, fare riferimento al file di metadati che contiene la definizione del tipo originale e rimuovere la dichiarazione e la definizione locali.
// 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 {};