考虑以下情况,结果为:
类型"连接字符串设置集合"在 未引用的程序集。必须添加对程序集的引用 "系统配置,版本..."。
组件 A.dll:
// References System.Configuration
public class Foo
{
public Foo(int value)
{
// ...
}
// ConnectionStringSettingsCollection is defined in System.Configuration
public Foo(ConnectionStringSettingsCollection connString)
{
// ...
}
}
组件 B.dll:
// References A.dll and _not_ System.Configuration
public class Bar
{
void SomeMethod()
{
var aFoo = new Foo(3); // Complains
}
}
该行var aFoo = new Foo(3);
抱怨上面提到的错误消息,这是清晰易懂的。
但是我不明白,为什么当类型没有公开任何属性也没有任何返回该类型任何方法时,我必须在程序集B.dll
中引用System.Configuration
。
类型不公开任何属性,也没有任何返回该类型任何内容的方法
这不是真的。Foo
类型有一个公共构造函数,该构造函数期望该类型作为其参数:
public Foo(ConnectionStringSettingsCollection connString)
因此,它是类型(和程序集(公共合同的一部分。在B
汇编中,编译器需要完全理解此协定,以便能够解析和调用正确的方法、属性、构造函数等。