Partager via


Avertissement du compilateur (niveau 1) C4691

'type' : le type référencé était attendu dans l’assembly non référencé 'file', type défini dans l’unité de traduction actuelle utilisée à la place

Le fichier de métadonnées contenant la définition de type d’origine n’est pas référencé et le compilateur utilise une définition de type local.

Dans le cas où vous régénérez le fichier, C4691 peut être ignoré ou désactivé avec l’avertissement pragma. Autrement dit, si le fichier que vous générez est identique au fichier dans lequel le compilateur s’attend à trouver la définition de type, vous pouvez ignorer C4691.

Toutefois, un comportement inattendu peut se produire si le compilateur utilise une définition qui ne provient pas du même assembly référencé dans les métadonnées ; Les types CLR sont tapés non seulement par le nom du type, mais également par l’assembly. Autrement dit, un type Z de l’assembly z.dll est différent d’un type Z de l’assembly y.dll.

Exemples

Cet exemple contient la définition de type d’origine.

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

Cet exemple référence C4691_a.dll et déclare un champ de type Original_Type.

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

L’exemple suivant génère l’erreur C4691. Notez que cet exemple contient une définition pour Original_Type et ne fait pas référence C4691a.dll.

Pour résoudre ce problème, référencez le fichier de métadonnées qui contient la définition de type d’origine et supprimez la déclaration et la définition locales.

// 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 {};