更新: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(); } } |