我有一个 ASP.Net 项目 (ProjA) 和一个类库项目 (LibB)。我在库中创建了一个自定义类 (ClassC),并添加了对现有 dll (DllD) 的引用。
我在 ProjA 中选择了“添加引用”选项,并从“解决方案”选项卡中选择了 LibB 并添加了引用。
在 ProjA 中,我创建了 ClassC 的实例。令我惊讶的是,它没有编译并显示错误:必须添加 DllD 作为对我的 ProjA 的引用。
这是消息:
The type 'XXXX' is defined in an assembly that is not referenced. You must add a reference to assembly '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
中的类型和成员。
根据您的编辑:
Well, XXX is a class that is the base of ClassC and the dll is referenced in the LibB project.
是的,编译器需要理解该类,包括它的所有基类。如果您使用组合而不是继承,并且 ClassC
仅包含对 XXX
实例的私有(private)引用,则不需要该引用。
1最明显的方法是:
public class ClassC {
void DoSomething(SomeTypeFromDllD input){...}
}
关于c# - 如何避免引用 DLL 的引用 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246749/