c# - 如何避免引用 DLL 的引用 DLL

标签 c# dll

我有一个 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/

相关文章:

c++ - (Qt 5.7.0) 无法找到或加载 qt 平台插件 "windows"

c# - 计算日期时间列表中的总分钟数

c# - Action 方法参数的继承

c# - 在属性上实现 IEnumerable

javascript - 在 Javascript 中调用 C# DLL - 将数据从 C# 推送到 JavaScript

java - JNA在Win7 64位机器上使用32位dll

c# - 是否可以在 C# 中观察 Rss 提要的变化?

c# - 贝塞尔曲面中的自动内部边缘

c# - 如何从C#中的特定路径读取dll

C#创建实现接口(interface)的DLL插件