Advertencia del compilador (nivel 1) CS1684
Actualización: noviembre 2007
Mensaje de error
La referencia al tipo 'Nombre de tipo' indica que está definida en 'Espacio de nombres', pero no se pudo encontrar
Reference to type 'Type Name' claims it is defined in 'Namespace', but it could not be found
Este error puede deberse a la existencia de una referencia dentro de un espacio de nombres que hace referencia a un tipo que dice existir dentro de un segundo espacio de nombres, pero no es así. Por ejemplo, mydll.dll indica que el tipo A existe dentro de yourdll.dll, pero no es así. Una causa posible de este error es que la versión de yourdll.dll que se usa sea demasiado antigua y todavía no se haya definido A en el archivo.
El código siguiente genera la advertencia CS1684.
Ejemplo
// 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(); }
}
Volvemos a generar ahora el primer ensamblado, omitiendo la definición de la clase C2 que no se va a definir en la nueva compilación.
// CS1684_c.cs
// compile with: /target:library /keyfile:CS1684.key /out:CS1684_a.dll
public class A {
public void Test() {}
}
Este módulo hace referencia al segundo módulo por medio del identificador Ref. Sin embargo, el segundo módulo contiene una referencia a la clase C2 que ya no existe debido a la compilación del paso anterior y, por consiguiente, al compilar este módulo se devuelve el mensaje de error CS1684.
// CS1684_d.cs
// compile with: /reference:cs1684_a.dll /reference:cs1684_b.dll
// CS1684 expected
class Tester
{
public static void Main()
{
Ref.GetA().Test();
}
}