Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) CS1684

Odwołanie do typu "Nazwa typu" oświadczenia jest zdefiniowane w przestrzeni nazw, ale nie można go odnaleźć

Ten błąd może być spowodowany odwołaniem wewnątrz jednej przestrzeni nazw odwołującej się do typu, który mówi, że istnieje wewnątrz drugiej przestrzeni nazw, ale typ nie istnieje. Na przykład mydll.dll mówi, że typ A istnieje wewnątrz yourdll.dll, ale w yourdll.dll nie istnieje taki typ. Jedną z możliwych przyczyn tego błędu jest to, że używana wersja yourdll.dll jest zbyt stara i A nie została jeszcze zdefiniowana.

Poniższy przykład generuje cs1684.

Przykład 1

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

Przykład 2

// 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(); }  
}  

Przykład 3

Teraz ponownie skompilujemy pierwszy zestaw, pomijając definicję klasy C2, która nie ma być zdefiniowana w rekompilacji.

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

Przykład 4

Ten moduł odwołuje się do drugiego modułu za pomocą identyfikatora Ref. Jednak drugi moduł zawiera odwołanie do klasy C2, która już nie istnieje z powodu kompilacji w poprzednim kroku, a zatem komunikat o błędzie CS1684 jest zwracany z kompilacji tego modułu.

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