2

我已经建立了一个类库项目,它引用了几个 dll。在我的类库项目的构造函数中,我使用了来自引用的 dll 之一的一些枚举。在另一个项目中使用我的类库时,是否可以不必添加对我的 dll 的引用以及我的类库项目在内部引用的那些?

4

6 回答 6

2

It depends on what you mean by reference internally.

If your application project uses type A from your class library, and that class does not expose any public types from other libraries, 3rd party or not, you don't need to add any references to more than your class library containing type A.

However, if type A exposes some public properties, methods returning types, or taking parameters of types, or perhaps type A is descended from a type, that is located in some other assembly, then you need a reference to that other assembly as well.

So if you indeed mean uses internally, then it should not be necessary to add more than just the one reference to your class library.

However, if the compiler complains, then that's what matters.

于 2008-12-10T17:26:42.617 回答
1

您只需要引用 DLL。您只引用您在程序集中使用的内容;这些程序集是完全自我描述的单个单元,因此不需要引用引用的程序集引用的引用(顺便说一句,我在这里反复使用“引用”这个词是在开玩笑:-)。

想象一下,如果您确实必须这样做 - BCL 引用了许多不同的东西,更不用说第 3 方组件了,想象一下您必须付出多少努力才能获得正确的引用!

于 2008-12-10T17:17:57.800 回答
0

如果您正在引用被引用程序集所公开的任何类型(即使只是它们的成员或类型化实例),那么您还必须包含对该程序集的引用。

于 2008-12-10T17:29:53.390 回答
0

在 ctor 中获取您自己的枚举,并将其转换为 3rd 方枚举。我相信这将使您的调用者不必引用第 3 方程序集(当然,它仍然需要在运行时可用才能使您的代码正常工作)。

于 2008-12-10T18:04:54.477 回答
0

我认为 lassevk 简洁地解释了它,但只是想补充一点,尽管您不需要引用DLL 使用的那些附加程序集(再次假设它们仅在内部使用而不公开),但您仍然需要使它们可访问你的申请。也就是说,它们必须是可找到的——在应用程序旁边或在 GAC 中,否则使用它们的 DLL 将无法找到它们。

于 2008-12-10T18:48:05.700 回答
-1

我不确定您要做什么,但如果您不想,则不必引用任何程序集。您可以使用反射。它通常被认为是一种 hack,不推荐,但有时是必要的。 在这里你有一篇文章解释了如何。

于 2008-12-10T17:43:05.487 回答