【问题标题】:C# - Getting references of referenceC# - 获取参考文献
【发布时间】:2010-09-26 06:56:25
【问题描述】:

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

【问题讨论】:

    标签: c# .net dll .net-2.0 class-library


    【解决方案1】:

    这取决于你所说的内部引用

    如果您的应用程序项目使用您的类库中的类型 A,并且该类不公开其他库中的任何公共类型,无论是否是第 3 方,您不需要添加任何引用,而不仅仅是包含类型的类库A.

    但是,如果类型 A 公开了一些公共属性、返回类型的方法或获取类型的参数,或者类型 A 可能是位于某个其他程序集中的类型的后代,那么您需要对该其他程序集的引用也是。

    因此,如果您确实是指在内部使用,那么不需要添加对类库的引用。

    但是,如果编译器抱怨,那才是最重要的。

    【讨论】:

    • 如果一个库确实公开了它自己的第 3 方引用的类型,那么总的来说,它已经取得了巨大的失败。封装人!!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            我不确定您要做什么,但如果您不想,则不必引用任何程序集。您可以使用反射。它通常被认为是一种 hack,不推荐,但有时是必要的。 Here you have an article 解释如何做。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-08-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-09-29
              • 2018-06-20
              相关资源
              最近更新 更多