【发布时间】:2010-09-26 06:56:25
【问题描述】:
我已经建立了一个类库项目,它引用了几个 dll。在我的类库项目的构造函数中,我使用了来自引用的 dll 之一的一些枚举。在另一个项目中使用我的类库时,是否可以不必添加对我的 dll 的引用以及我的类库项目在内部引用的那些?
【问题讨论】:
标签: c# .net dll .net-2.0 class-library
我已经建立了一个类库项目,它引用了几个 dll。在我的类库项目的构造函数中,我使用了来自引用的 dll 之一的一些枚举。在另一个项目中使用我的类库时,是否可以不必添加对我的 dll 的引用以及我的类库项目在内部引用的那些?
【问题讨论】:
标签: c# .net dll .net-2.0 class-library
这取决于你所说的内部引用。
如果您的应用程序项目使用您的类库中的类型 A,并且该类不公开其他库中的任何公共类型,无论是否是第 3 方,您不需要添加任何引用,而不仅仅是包含类型的类库A.
但是,如果类型 A 公开了一些公共属性、返回类型的方法或获取类型的参数,或者类型 A 可能是位于某个其他程序集中的类型的后代,那么您需要对该其他程序集的引用也是。
因此,如果您确实是指在内部使用,那么不需要添加对类库的引用。
但是,如果编译器抱怨,那才是最重要的。
【讨论】:
您只需要引用 DLL。您只引用您在程序集中使用的内容;组件是完全自我描述的单个单元,因此不需要引用引用的组件引用的引用(顺便说一句,我在这里反复使用“引用”这个词是在开玩笑:-)。
想象一下,如果您确实必须这样做 - BCL 引用了许多不同的东西,更不用说第 3 方组件了,想象一下您必须付出多少努力才能获得正确的引用!!
【讨论】:
如果您要引用被引用程序集公开的任何类型(即使只是它们的成员或类型化实例),那么您也必须包含对该程序集的引用。
【讨论】:
在 ctor 中获取您自己的枚举,并将其转换为 3rd 方枚举。我相信这将使您的调用者不必引用第 3 方程序集(当然,它仍然需要在运行时可用,您的代码才能工作)。
【讨论】:
我认为 lassevk 简洁地解释了它,但只是想补充一点,尽管您不需要 引用 DLL 使用的那些附加程序集(再次假设它们仅在内部使用而不是公开的) ,您确实仍然需要让您的应用程序可以访问它们。也就是说,它们必须是可找到的——无论是在应用程序旁边,还是在 GAC 中,否则使用它们的 DLL 将无法找到它们。
【讨论】:
我不确定您要做什么,但如果您不想,则不必引用任何程序集。您可以使用反射。它通常被认为是一种 hack,不推荐,但有时是必要的。 Here you have an article 解释如何做。
【讨论】: