【问题标题】:Adding a dll file to a C# project将 dll 文件添加到 C# 项目
【发布时间】:2009-06-22 21:45:48
【问题描述】:

这是一个初学者的问题,但是...

Image of dll reference and dll included in project file http://a3.vox.com/6a00c2251e5b66549d00e398ca81eb0003-pi

如果你看上面的图片,有“Bass.Net”dll作为参考添加,也直接作为项目中的文件。

谁能告诉我这样做有什么意义?

【问题讨论】:

    标签: c# .net dll installation project


    【解决方案1】:

    没有理由,真的。可能是 Visual Studio 设置为显示不在项目中的文件(从图片中很难分辨),而 dll 恰好位于主目录中。文字很清楚,额外的文件是

    • bass.dll
    • bassenc.dll
    • lame.exe

    .net 恰好与其他目录位于同一目录中,您需要将其添加为参考。

    【讨论】:

      【解决方案2】:

      在 Windows 中,DLL 是 dynamic link library,它将一组编程功能打包在一起。在此示例中,bass.dll 通过此文件(以及它所依赖的任何文件)公开与音频处理相关的特性和功能。为了使用此功能,您需要在解决方案中引用,以便 Visual Studio 在编译时可以link it。然后,通常会在构建应用程序时将 DLL 复制到您的输出目录。

      这就是使代码正常工作所必需的一切,其余的实际上只是偏好或约定。有些人更喜欢将项目目录中存在的所有文件都包含在解决方案中,以便解决方案资源管理器反映文件系统。通常,您会希望您的应用程序依赖于解决方案目录层次结构中的某个位置,以便将整个应用程序打包在一起(例如,使源代码控制更容易使用)。但是,您不希望将此库放在 BIN 目录或 Visual Studio 生成的任何目录中,以避免意外删除。无论如何,引用是重要的部分,项目或解决方案中的文件不是必需的。

      不过,通常情况下,您会希望将外部库保留在源目录之外,因此我实际上并不推荐这种结构。我倾向于使用这样的结构,但是,这只是偏好:

      • 来源:源代码和项目文件
      • 库:DLL
      • 支持:杂项代码或项目,但实际上不是应用程序的一部分(可能是部署脚本)

      【讨论】:

        【解决方案3】:

        将它们放在您的项目和输出目录中允许最终执行代码引用它们,而不会在不同机器上运行任何问题。

        听起来他们将引用 dll 放在项目目录中,从那里引用它们,并将它们包含在项目中。这样,在复制项目目录时,引用的 dll 也会随之复制。此外,如果缺少引用 dll,项目将在 Visual Studio 中报错。

        【讨论】:

          【解决方案4】:

          如果程序集(在您的情况下为 Bass.Net.dll)包含您要使用的类,则必须将对该程序集的引用添加到您的项目中。

          【讨论】:

          • 我明白为什么它在参考中 - 但不明白为什么它作为文件添加到项目中。
          • 对不起,我没有正确理解这个问题。是的,将其添加为参考就足够了,将其“添加为文件”并不重要。当然,当您部署应用程序时,它必须与您的可执行文件位于同一文件夹中。
          【解决方案5】:

          最好的办法是获取所有依赖项并将它们存储在单独的文件夹中,并且只引用它们,不要将它们复制到您的解决方案中;)

          【讨论】:

          • 有时拥有 DLL 的本地副本是有意义的。
          【解决方案6】:

          真的很难猜到为什么别人会做某事,但如果我真的不得不猜的话,我会说那个人想将必要的 dll 作为资源嵌入,以确保它对应用程序可用。我见过这种用于嵌入字体或声音的技术,但不确定它是否适用于 dll;但这只是一个猜测。
          当然,确保文件可用的最佳方法是使用 Visual Studio 或其他一些安装工具(例如 Wise 或 InnoSetup,仅举几例)创建部署项目。

          【讨论】:

            【解决方案7】:

            在很多情况下,这实际上可能是个好主意。在我看来,它们是 3 种依赖类型

            1. .Net 标准库中的程序集。永远不要在本地包含那些。
            2. 您希望其他开发人员作为 MSI 或 exe 安装程序包的一部分安装的程序集。这通常意味着他们在 GAC 中签名并拥有一份副本。
            3. 您不希望其他开发人员通过 MSI 或 exe 安装程序安装的程序集。可能是因为您有第三方或内部图书馆不在 GAC 中。

            在第三种情况下,最简单的做法是将 DLL 的副本存储在源代码库中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-21
              • 1970-01-01
              • 2017-04-18
              • 1970-01-01
              • 2011-02-07
              相关资源
              最近更新 更多