【问题标题】:Best practices for referencing 3rd party assemblies引用第 3 方程序集的最佳实践
【发布时间】:2010-09-23 05:24:04
【问题描述】:

我一直想知道在引用第 3 方程序集时有哪些最佳做法。前段时间我问了一个问题“Dependencies and references: what exactly should I reference”并收到了一些值得思考的问题,但我并不完全相信。我有一个构建项目所需的第 3 方程序集,根据我目前所阅读的内容,我应该只引用构建项目所需的程序集。这留下了第 3 方程序集的运行时依赖问题。如果我也引用这些,那么引用列表会变得很大(因为有几个依赖项)并且包含很多程序集,我不知道做什么,实际上与我的项目无关。此外,我想避免在其中任何一个中使用公共方法,而只使用主要的第 3 方大会。我怎样才能以体面的方式做到这一点? 感谢任何帮助,因为我很困惑。

为了说明我在这里处理的内容是第 3 方库使用 hibernate 和 log4net 以及办公室互操作程序集。

谢谢。

【问题讨论】:

    标签: .net dependencies


    【解决方案1】:

    如果我必须处理未在 GAC 中注册的库,我使用以下方法:

    • 创建一个文件夹“Libs”,其中包含所有第三方库及其依赖项
    • 参考我需要的那些
    • 创建一个构建后操作,将“Libs”文件夹中的所有文件复制到“bin/debug”(或发布)文件夹

    如果不知道依赖,可以使用Dependency Walker。

    【讨论】:

    • 如何处理共享库?假设您有 3 个项目属于同一解决方案并且它们共享库。然后,您在其中一个中使用了第 3 方库(以及依赖项)。你在每个项目中都有 lib 文件夹,每个项目都有 libs 副本吗?
    • 这个“Libs”文件夹是指每个项目目录下都有 Libs 文件夹吗?
    • 只有 1 个“库”。解决方案文件夹 |_ Libs |_ Project1 |_ Project2 |_ Project3 |_ bin Project1、Project2 和 Project3 都引用“Solution folder\Libs”中的同一个库。
    • 这就是我所做的,但您不需要构建后操作,只需在引用的属性上将“复制本地”设置为 true。
    • 你还需要被引用的库所依赖的库。
    【解决方案2】:

    我在许多 (C#) 项目中使用的替代方法是:

    • 在解决方案目录中创建一个“Bin”文件夹(与项目目录同级)
    • 将所有项目的输出设为 ../Bin 而不是 bin/debug 或 bin/release
    • 将任何不是构建结果的文件放入“Bin”中,包括库依赖项、某些数据文件或其他内容,具体取决于项目
    • “Bin”的内容也进入源代码管理(当然没有构建输出)
    • 您的项目直接引用的任何库都进入“References”或“Libs”文件夹(有时我也尝试将它们放入 Bin 中,但在这种情况下,您需要记住禁用将引用复制到输出目录添加对项目的引用时,这在大型项目中变得乏味)

    不确定这是否是一个好的解决方案,但到目前为止对我有用。

    【讨论】:

      【解决方案3】:

      您还可以使用NDepend 准确了解和控制您从层库中使用的内容。我写了一篇关于这个的文章Controlling the usage of libraries

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-17
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        相关资源
        最近更新 更多