将dll文件添加到C#项目
这是一个初学者的问题,但……
项目文件中包含的dll参考和dll的图像http://a3.vox.com/6a00c2251e5b66549d00e398ca81eb0003-pi
如果你看一下上面的图片,就会添加“Bass.Net”dll作为参考,也可以直接作为项目中的文件。
有人能告诉我这样做有什么意义吗?
没理由,真的。 可能是Visual Studio设置为显示不在项目中的文件(很难从图中看出),并且dll恰好位于主目录中。 文字很清楚,额外的文件是
- bass.dll
- bassenc.dll
- lame.exe
.net恰好与同一目录中的其他人一起使用,您需要将其添加为参考。
在Windows中,DLL是一个动态链接库 ,它将一组编程function打包在一起。 在此示例中,bass.dll通过此文件(以及它依赖的任何文件)公开与音频处理相关的特性和function。 为了使用此function,您需要解决方案中的引用,以便Visual Studio可以在编译时链接它 。 然后,在构建应用程序时,通常会将DLL复制到输出目录。
这就是让代码正常工作所必需的,其余的只是偏好或惯例。 有些人更喜欢在解决方案中包含项目目录中存在的所有文件,以便解决方案资源管理器反映文件系统。 通常,您希望应用程序依赖于解决方案目录层次结构中的某个库,以便将整个应用程序打包在一起(例如,使源代码控制更容易使用)。 但是,您不希望将此库放在BIN目录或Visual Studio生成的任何目录中,以避免意外删除。 无论如何,将引用作为重要部分,不需要项目或解决方案中的文件。
通常,您需要将外部库保留在源目录之外,所以我实际上不会推荐这种结构。 我倾向于使用这样的结构,但同样,这是所有偏好:
- 来源:源代码和项目文件
- 库:DLL
- 支持:杂项代码或项目,但实际上不是应用程序的一部分(可能是部署脚本)
在项目和输出目录中包含这些内容允许最终执行代码引用它们,而不会在不同的机器上运行任何问题。
听起来就像它们将引用dll放在项目目录中,从那里引用它们,并将它们包含在项目中。 这样,当复制项目目录时,将使用它复制引用dll。 此外,如果缺少引用dll,项目将在Visual Studio中进行投诉。
如果程序集(在您的情况下为Bass.Net.dll)包含您要使用的类,则必须将对该程序集的引用添加到项目中。
没有必要做的最好的事情是获取所有依赖项并将它们存储在一个单独的文件夹中,只引用它们不要将它们复制到您的解决方案;)
很难猜到为什么其他人做了什么,但如果我真的不得不猜测,我会说这个人想要将必要的dll作为资源嵌入,以确保它可用于应用程序。 我已经看到这种技术用于嵌入字体或声音,我不确定它是否适用于dll; 但这只是猜测。
当然,确保文件可用的最佳方法是创建一个部署项目,使用Visual Studio或其他一些安装工具来运行Wise或InnoSetup,仅举几例。
在很多情况下,这实际上可能是一个好主意。 在我看来,他们是3种类型的依赖
- 来自.Net标准库的程序集。 永远不要在本地包括。
- 您希望其他开发人员作为MSI或exe安装程序包的一部分安装的程序集。 这通常意味着他们强烈签署并在GAC中有一份副本。
- 您不希望其他开发人员通过MSI或exe安装程序安装的程序集。 也许是因为您有第三方或内部库而非GAC。
在第三种情况下,最简单的方法是在源代码库中存储DLL的副本。