首页 > 解决方案 > 为什么在这种情况下会出现“类型是在未引用的程序集中定义的”?

问题描述

考虑以下导致的情况:

“ConnectionStringSettingsCollection”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Configuration, Version ...”的引用。

程序集 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);抱怨上面提到的错误消息,这是清晰易懂的。

但是我不明白,为什么当类型没有公开公开任何属性也没有任何方法返回该类型的任何内容时,我必须System.Configuration在程序集中引用。B.dll

标签: c#

解决方案


该类型没有公开公开任何属性,也没有任何方法可以返回该类型的任何内容

这不是真的。该Foo类型有一个公共构造函数,该构造函数期望该类型作为其参数:

public Foo(ConnectionStringSettingsCollection connString) 

因此,它是类型(和程序集)公共合同的一部分。在程序集中B,编译器需要完全理解这个契约,以便能够解析和调用正确的方法、属性、构造函数等。


推荐阅读