【问题标题】:DLL reference locationDLL 参考位置
【发布时间】:2012-09-17 17:59:40
【问题描述】:

好的,前几天我问了this question,由于我的含糊其辞被关闭了。我会尝试更具体。在一个项目中,比如 C#(使用 Visual Studio),我添加了对 dll 的引用(右键单击 References->Add Reference),并且所述 dll 的位置在 C:\Blah\Foo 中。现在,如果我将构建的 exe 移动到另一台机器上,dll 的位置是否需要与 exe 一起,还是需要在 C:\Blah\Foo 中?谢谢。

【问题讨论】:

    标签: c# dll


    【解决方案1】:

    当您以您描述的方式添加引用时,它将被复制到输出文件夹(与 exe 文件相同)。查看引用的属性 (F4),您将看到一个名为“Copy Local”的选项,如果将其设置为 true,则 DLL 将被复制到与 EXE 文件相同的输出文件夹中。

    因此,当您将应用程序部署到另一台计算机时,您需要将 exe 及其引用的所有 DLL 复制到部署位置。 Windows 将在多个位置搜索 DLL,其中第一个位置与 EXE 文件位于同一文件夹中。

    【讨论】:

    • +1。评论如何确认文件设置为复制到输出文件夹(在文件的属性中)会很有用
    • 非常感谢。这真的很有帮助。
    【解决方案2】:

    通常,您只需将程序集放在与应用程序相同的文件夹中,这会导致它位于默认探测路径中并被找到(对于大多数应用程序),但根据类型还有许多其他选项的应用。当您定义参考时,可以选择“复制本地” - 这会将程序集复制到应用程序的输出文件夹。如果将此设置保留为 True,则程序集 (DLL) 将与 .exe 一起使用,并且通常“正常工作”。

    运行时使用的完整过程在 MSDN 上的 How the Runtime Locates Assemblies 中进行了介绍。特别是,标题为Locating the Assembly through Codebases or Probing 的主题详细介绍了程序集的位置,这取决于很多因素。

    【讨论】:

      【解决方案3】:

      DLL 应该带有 exe 文件。查看此链接以查看 .NET 搜索 DLL 的位置In what order are locations searched to load referenced DLLs?

      【讨论】:

        【解决方案4】:

        dll 可以安装在 GAC 中,也可以与 EXE 位于同一目录中。

        编辑:上面提到的只是解决引用的几个位置。

        【讨论】:

        • 啊!!不是 GAC,请不要 GAC!
        • +1。这是正确且几乎完整的答案,无论 GAC 是好还是坏的位置或 DLL。
        • @AlexeiLevenkov 虽然它实际上并不完整 - 它不考虑 <codeBase>、私有探测路径、COM 互操作等。实际上有很多复杂性取决于应用程序的类型和此处使用的配置。
        • @ReedCopsey,我知道并试图用“几乎完成”来表达...应该是 +1 表示好的答案,+2 表示正确的答案,+3 表示 Reed/Jon 的答案 :)
        【解决方案5】:

        当您添加引用时,您在此程序集上的 csproj 上添加路径,您不必确保您可以引用此 dll。

        当您部署时,这是另一个问题,因为您的 dll 被复制到您的 Bin 目录中。

        如果您部署,请检查您的 csproj 中的程序集路径,并确保部署您的程序集

        注意:检查CopyLocal您的参考属性

        2 其他解决方案:

        您可以使用GAC Global Assembly Cache 来共享您的程序集

        工具:Gacutil.exe 用于设置程序集

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-13
          • 1970-01-01
          • 1970-01-01
          • 2013-03-23
          • 2018-11-21
          相关资源
          最近更新 更多