我有一个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?
问题是,LibB必须公开DllD代码中包含的一些类型ProjA.1
如果它只是在幕后消耗了那些类型,那么引用就没有必要了.但显然,这不是它的作用.因此编译器希望引用能够完全理解其中的类型和成员LibB.
根据您的编辑:
好吧,XXX是ClassC的基础,并且在LibB项目中引用了dll.
是的,编译器需要理解该类,包括它的所有基类.如果您使用合成而不是继承,并且ClassC只包含对XXX实例的私有引用,则不需要引用.
1最明显的方法是:
public class ClassC {
void DoSomething(SomeTypeFromDllD input){...}
}
Run Code Online (Sandbox Code Playgroud)