编译器警告(等级 1)CS1684
对类型“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();
}
}