aviso do compilador (nível 1) CS1684

Mensagem de erro

A referência ao tipo 'Nome do tipo' alega estar definida em 'Namespace', mas ele não pôde ser encontrado

Este erro pode ser causado por uma referência de um espaço para nome se referindo a um tipo que ele diz existe dentro de um segundo espaço para nome, mas o tipo não existe.Por exemplo, mydll.dll diz que tipo de A existe dentro dos yourdll.dll, mas nenhum tipo de tal existe dentro dos yourdll.dll. Uma causa possível deste erro é que a versão do yourdll.dll você está usando é muito antiga e A não foi ainda definida.

O exemplo a seguir gera CS1684.

Exemplo

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

Agora nós recompilar o assembly primeiro, deixando fora da definição da classe C2 para não ser definidos na recompilação.

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

Este módulo faz referência o segundo módulo de por meio do identificador Ref. Mas o segundo módulo contém uma referência à classe C2, que não existe mais devido da compilação na etapa anterior e, portanto, a mensagem de erro CS1684 é retornada de compilação deste módulo.

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