C# 为什么我会得到;xxx类型是在未引用的程序集中定义的;?

C# 为什么我会得到;xxx类型是在未引用的程序集中定义的;?,c#,mongodb,reference,C#,Mongodb,Reference,我有以下C#项目结构: Main.dll 对->Util.dll的引用 class One { void function1() { Two.Function2("foo", "bar"); } } Util.dll 参考->MongoDB.Driver.dll class Two { public static void function2(string para1, string para2) { function2(null, pa

我有以下C#项目结构:

Main.dll
对->Util.dll的引用

class One {
    void function1() {
        Two.Function2("foo", "bar");
    }
}
Util.dll
参考->MongoDB.Driver.dll

class Two {
    public static void function2(string para1, string para2) {
        function2(null, para1, para2)
    }

    protected static void function2(IMongoQuery query, string para1, string para2) {
        // do a MongoDB query
    }
}
如果我尝试构建Main.dll,我会得到:

类型“MongoDB.Driver.imongquery”是在以下程序集中定义的 未引用。必须添加对程序集的引用 'MongoDB.Driver,版本=1.8.3.9,区域性=中性, PublicKeyToken=f686731cfb9cc103'


添加引用可以解决这个问题,但我不明白为什么主项目需要知道这个参数类型?我做错什么了吗?我不知道这是否与MongoDB相关,我只想从上面的层隐藏MongoDB。

这是因为您使用的类接受的参数不在由
Main.dll引用的程序集中。编译器不会尝试解析依赖项的依赖项。

这是因为您使用的类接受的参数不在
Main.dll
引用的程序集中。编译器不会尝试解析依赖项的依赖项。

这是因为您使用的类接受的参数不在
Main.dll
引用的程序集中。编译器不会尝试解析依赖项的依赖项。

这是因为您使用的类接受的参数不在
Main.dll
引用的程序集中。编译器不会尝试解析依赖项的依赖项。

您的公共接口中有一个对MongoDB的引用(是的,在本例中受保护被视为公共,因为您的其他程序集可以通过派生类“查看”它),因此您需要包含它


找到一个不向程序集外部的类公开类型的解决方案。例如,
internal
关键字。

您的public接口中有一个对MongoDB的引用(是的,在这种情况下,受保护被视为public,因为您的其他程序集可以通过派生类“查看”它),所以您需要包含它


找到一个不向程序集外部的类公开类型的解决方案。例如,
internal
关键字。

您的public接口中有一个对MongoDB的引用(是的,在这种情况下,受保护被视为public,因为您的其他程序集可以通过派生类“查看”它),所以您需要包含它


找到一个不向程序集外部的类公开类型的解决方案。例如,
internal
关键字。

您的public接口中有一个对MongoDB的引用(是的,在这种情况下,受保护被视为public,因为您的其他程序集可以通过派生类“查看”它),所以您需要包含它


找到一个不向程序集外部的类公开类型的解决方案。例如,
internal
关键字。

您的
Two.function2
方法受
保护
,并使用
IMongoQuery
参数。此方法可能对从
Two
派生的任何类可见,因此Main.dll需要对MongoDB程序集的引用。

您的
Two。function2
方法受
保护
,并使用
IMongoQuery
参数。此方法可能对从
Two
派生的任何类可见,因此Main.dll需要对MongoDB程序集的引用。

您的
Two。function2
方法受
保护
,并使用
IMongoQuery
参数。此方法可能对从
Two
派生的任何类可见,因此Main.dll需要对MongoDB程序集的引用。

您的
Two。function2
方法受
保护
,并使用
IMongoQuery
参数。此方法可能对从
Two
派生的任何类都可见,因此Main.dll需要对MongoDB程序集的引用。

这就解释了它,但我不能使用“internal”,因为我需要在第三个程序集中从此类派生。所以我需要接受这个…这就解释了,但我不能使用“internal”,因为我需要在第三个程序集中从这个类派生。所以我需要接受这个…这就解释了,但我不能使用“internal”,因为我需要在第三个程序集中从这个类派生。所以我需要接受这个…这就解释了,但我不能使用“internal”,因为我需要在第三个程序集中从这个类派生。所以我需要接受这个。。。