更新:2007 年 11 月

错误消息

对类型“Type Name”的引用声明它是在“Namespace”中定义的,但却没有找到它

当一个命名空间中的引用引用了一个类型,并声明该类型存在于另一个命名空间中,但该类型并不存在时,可能导致此错误。例如,mydll.dll 声明类型 A 存在于 yourdll.dll 中,但 yourdll.dll 中并没有这种类型。导致此错误的一种可能是,您使用的 yourdll.dll 版本太旧,尚未定义 A

下面的示例生成 CS1684。

示例

 复制代码
// 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(); }
}

现在,我们重新生成第一个程序集,并在重新编译中对类 C2 的定义不做任何定义。

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

此模块通过标识符 Ref 引用第二个模块。但是第二个模块包含对类 C2 的引用,由于上一步中的编译,该类已不存在,所以此模块的编译返回 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();
   }
}