dll文件在被引用后是否嵌入到可执行文件中?

Are dll files added embedded in the executable file after they have been referenced?

基本上我想知道的是,当我在 visual studio 中添加对任何 .dll 文件的引用时,这个 dll 是否会嵌入到可执行文件中?如果不是,可执行文件如何知道在哪里寻找这些 dll 文件:

程序集未嵌入。

如果您引用非强命名程序集,它会被复制到可执行文件所在的文件夹中(您也可以将程序集放在任何其他位置)。 CLR 在包含可执行文件的文件夹或您可以设置为 CLR 查找的任何其他文件夹中查找此程序集。

如果您引用任何具有强名称的程序集,则 CLR 将以与查找非强名称程序集相同的方式查找该程序集,此外还会在全局程序集缓存 (GAC - MSDN - GAC) 中查找该程序集。

库可以通过两种主要方式链接到可执行文件:动态和静态。

动态意味着可执行文件将在可执行文件中有一个标记,声明对库的依赖性。操作系统或 运行-time 环境负责查找该库,假设它已安装在系统上。如果您正在使用这样的库,您需要知道它们来自何处(.NET、Visual Studio、第 3 方等...),以便您可以确保在分发应用程序时将它们安装在系统中.通常,您可以通过将它包含在与您的可执行文件相同的文件夹中(对于 Windows)来确保您使用的是您想要的库版本,但您通常不想为那些是可能已经在系统上了。

静态意味着库被编译成可执行文件。可执行文件变得更大,并且保证您使用您制作程序时使用的库版本,但并非所有库都可以静态使用。

DLL,字面意思是动态 Link 库,因此您需要知道您正在使用的库来自哪里,以确保它们存在于您希望应用程序所在的系统上 运行 .