【发布时间】:2009-06-22 21:45:48
【问题描述】:
这是一个初学者的问题,但是...
如果你看上面的图片,有“Bass.Net”dll作为参考添加,也直接作为项目中的文件。
谁能告诉我这样做有什么意义?
【问题讨论】:
标签: c# .net dll installation project
这是一个初学者的问题,但是...
如果你看上面的图片,有“Bass.Net”dll作为参考添加,也直接作为项目中的文件。
谁能告诉我这样做有什么意义?
【问题讨论】:
标签: c# .net dll installation project
没有理由,真的。可能是 Visual Studio 设置为显示不在项目中的文件(从图片中很难分辨),而 dll 恰好位于主目录中。文字很清楚,额外的文件是
.net 恰好与其他目录位于同一目录中,您需要将其添加为参考。
【讨论】:
在 Windows 中,DLL 是 dynamic link library,它将一组编程功能打包在一起。在此示例中,bass.dll 通过此文件(以及它所依赖的任何文件)公开与音频处理相关的特性和功能。为了使用此功能,您需要在解决方案中引用,以便 Visual Studio 在编译时可以link it。然后,通常会在构建应用程序时将 DLL 复制到您的输出目录。
这就是使代码正常工作所必需的一切,其余的实际上只是偏好或约定。有些人更喜欢将项目目录中存在的所有文件都包含在解决方案中,以便解决方案资源管理器反映文件系统。通常,您会希望您的应用程序依赖于解决方案目录层次结构中的某个位置,以便将整个应用程序打包在一起(例如,使源代码控制更容易使用)。但是,您不希望将此库放在 BIN 目录或 Visual Studio 生成的任何目录中,以避免意外删除。无论如何,引用是重要的部分,项目或解决方案中的文件不是必需的。
不过,通常情况下,您会希望将外部库保留在源目录之外,因此我实际上并不推荐这种结构。我倾向于使用这样的结构,但是,这只是偏好:
【讨论】:
将它们放在您的项目和输出目录中允许最终执行代码引用它们,而不会在不同机器上运行任何问题。
听起来他们将引用 dll 放在项目目录中,从那里引用它们,并将它们包含在项目中。这样,在复制项目目录时,引用的 dll 也会随之复制。此外,如果缺少引用 dll,项目将在 Visual Studio 中报错。
【讨论】:
如果程序集(在您的情况下为 Bass.Net.dll)包含您要使用的类,则必须将对该程序集的引用添加到您的项目中。
【讨论】:
最好的办法是获取所有依赖项并将它们存储在单独的文件夹中,并且只引用它们,不要将它们复制到您的解决方案中;)
【讨论】:
真的很难猜到为什么别人会做某事,但如果我真的不得不猜的话,我会说那个人想将必要的 dll 作为资源嵌入,以确保它对应用程序可用。我见过这种用于嵌入字体或声音的技术,但不确定它是否适用于 dll;但这只是一个猜测。
当然,确保文件可用的最佳方法是使用 Visual Studio 或其他一些安装工具(例如 Wise 或 InnoSetup,仅举几例)创建部署项目。
【讨论】:
在很多情况下,这实际上可能是个好主意。在我看来,它们是 3 种依赖类型
在第三种情况下,最简单的做法是将 DLL 的副本存储在源代码库中。
【讨论】: