为什么在这种情况下我会得到"The type is defined in an assembly that is not referenced"?



考虑以下情况,结果为:

类型"连接字符串设置集合"在 未引用的程序集。必须添加对程序集的引用 "系统配置,版本..."。

组件 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汇编中,编译器需要完全理解此协定,以便能够解析和调用正确的方法、属性、构造函数等。

相关内容

最新更新