如何避免引用dll引用的dll

时间:2014-04-23 14:02:58

标签: c# dll

我有一个ASP.Net项目(ProjA)和一个类库项目(LibB)。我在库中创建了一个自定义类(ClassC),并添加了对现有dll(DllD)的引用。

我在ProjA中选择了Add reference选项,并从Solution选项卡中选择了LibB并添加了引用。

在ProjA中,我创建了一个ClassC实例。令我惊讶的是,它没有编译并向我显示错误:必须添加DllD作为我的ProjA的参​​考。

以下是信息:

  

类型“XXXX”在未引用的程序集中定义。您   必须添加对程序集'YYYYYY,Version = 1.0.0.0的引用,   Culture = neutral,PublicKeyToken = xxxxxxx'。

嗯,XXX是ClassC的基础,并且在LibB项目中引用了dll。

那么LibB有什么意义呢?我不想将DllD添加到我的ProjA项目中,我只想在另一个项目中使用依赖于它的自定义类

我必须添加这样的dll是正常的吗? 我应该设置什么来使我的LibB包含DllD dll?

1 个答案:

答案 0 :(得分:5)

问题是,LibB必须将DllD中包含的某些类型公开给ProjA中的代码。 1

如果它只是消耗幕后的那些类型,那么引用就没有必要了。但显然,这不是它的作用。因此,编译器希望引用能够完全理解LibB中的类型和成员。


根据您的修改:

  

嗯,XXX是ClassC的基础,并且在LibB项目中引用了dll。

是的,编译器需要理解该类,包括它的所有基类。如果您使用了合成而不是继承,并且ClassC只包含对XXX实例的私有引用,则不需要引用。


1 最明显的方式是:

public class ClassC {
    void DoSomething(SomeTypeFromDllD input){...}
}