Partager via


Avertissement du compilateur (niveau 1) CS1684

Mise à jour : novembre 2007

Message d'erreur

Une référence au type 'Nom de type' déclare qu'il est défini dans 'Espace de noms', mais il est introuvable
Reference to type 'Type Name' claims it is defined in 'Namespace', but it could not be found

Cette erreur peut être provoquée par une référence contenue dans un espace de noms faisant référence à un type supposé figurer dans un deuxième espace de noms ; or, ce type n'existe pas. Par exemple, mydll.dll déclare que le type A se trouve dans yourdll.dll, mais ce type n'existe pas dans yourdll.dll. Cette erreur peut être due au fait que la version de yourdll.dll utilisée est trop ancienne et que A n'ait pas encore été défini.

L'exemple suivant génère l'erreur CS1684.

Exemple

// CS1684_a.cs
// compile with: /target:library /keyfile:CS1684.key
public class A {
   public void Test() {}
}

public class C2 {}

// CS1684_b.cs
// compile with: /target:library /r:cs1684_a.dll
// post-build command: del /f CS1684_a.dll
using System;
public class Ref 
{
   public static A GetA() { return new A(); }
   public static C2 GetC() { return new C2(); }
}

Nous régénérons maintenant le premier assembly, en ignorant la définition de la classe C2 à ne pas définir dans la recompilation.

// CS1684_c.cs
// compile with: /target:library /keyfile:CS1684.key /out:CS1684_a.dll
public class A {
   public void Test() {}
}

Ce module fait référence au deuxième module par le biais de l'identificateur Ref. Toutefois, le deuxième module contient une référence à la classe C2, qui n'existe plus en raison de la compilation exécutée à l'étape précédente. Par conséquent, le message d'erreur CS1684 est retourné par la compilation de ce module.

// CS1684_d.cs
// compile with: /reference:cs1684_a.dll /reference:cs1684_b.dll
// CS1684 expected
class Tester
{
   public static void Main()
   {
      Ref.GetA().Test();
   }
}