【问题标题】:Are dll files added embedded in the executable file after they have been referenced?dll文件被引用后是否嵌入到可执行文件中?
【发布时间】:2017-05-27 18:45:59
【问题描述】:

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

【问题讨论】:

  • 没有。这些是框架程序集。 CLR 知道如何在 GAC 中找到它们,c:\windows\microsoft.net\assembly

标签: c# dll reference .net-assembly


【解决方案1】:

程序集未嵌入。

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

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

【讨论】:

  • 对强命名程序集的引用也将搜索应用程序的本地文件夹,您不必将其放入 GAC 即可使用。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多