【问题标题】:Specifying a DLL reference指定 DLL 引用
【发布时间】:2010-03-24 15:39:55
【问题描述】:

我在设置与可执行文件不在同一目录中的 DLL 的路径时遇到问题。

我有一个对 dllA.dll 的引用。目前,一切都只是复制到同一个目录中,一切正常;但是,我需要将可执行文件移动到另一个目录,同时仍然引用原始目录中的 DLL。

所以,它的设置如下:

C:\Original\Dir

program.exe
dllA.dll
dllB.dll
dllC.dll

但我需要像这样设置它:

C:\New\Dir

program.exe
dllB.dll
dllC.dl

这样它仍然可以引用 C:\Original\dir 中的 dllA.dll

我尝试了以下方法,但无济于事:

  • 将 dllA.dll 的“复制本地”值设置为 false,因为我希望在其原始位置引用它。
  • 在“工具 > 选项 > 项目和解决方案 > VC++ 目录”下,我已将路径添加到“C:\Original\Dir”
  • 在 PATH 和 LIB 环境变量中添加了“C:\Original\Dir”

在运行时,它告诉我它找不到 dllA.dll 也许我采取的上述步骤只在编译时起作用?

我能找到这个 C# : Specifying a location for Dll reference

但我认为我的上述方法应该有效。

有什么想法吗?

【问题讨论】:

    标签: vb.net dll path


    【解决方案1】:

    您的编译时设置不会影响运行时路径。尝试添加 C:\Original\dir 到系统范围的路径,你应该看到它正确地选择了 DLL。如果是这样,那么您的解决方案似乎是: 1)永久修改系统路径。可能可行,也可能不可行。 2) 在运行时改变环境路径。 3) 引用 DLL 时使用相对路径。 4)在安装时记录DLL的路径,可能在注册表中,以便您的exe可以显式加载它。

    【讨论】:

    • "尝试将 C:\Original\dir 添加到系统范围的路径" 如果这样,您的意思是将 "C:\Oriignal\dir" 添加到 PATH 环境变量,我最初尝试过.
    【解决方案2】:

    虽然我可能仍然愚蠢地认为这可以通过指定正确的路径变量来完成,但我能够通过在我的 app.config 中添加一些条目来解决这个问题

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="dllA" publicKeyToken="blah" culture="neutral" />
        <codeBase version="blah" href="file:///C:/Original/Dir/dllA.dll" />
      </dependentAssembly>
    </runtime>
    

    【讨论】:

      【解决方案3】:

      根据上述答案(感谢 Karl),我不清楚 href 的语法,尤其是相对路径:

       <dependentAssembly>
          <assemblyIdentity name="SVDInterface"  culture="neutral" />
          <codeBase version="1.0.3114.29282" href="./System/SVD/SVDInterface.dll" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Math Functions"  culture="neutral" />
          <codeBase version="1" href="./System/SVD/Math Functions.dll" />
        </dependentAssembly>
      

      我从参考选项卡中获得的第一个 dll 的版本号。 在研究了许多指定 dll 所在位置的方法之后,这是迄今为止最简单的方法——我仍然花了一整天的时间让它完全工作。 最后一点信息是上面的 App.config 条目被写入 yourappname.exe.config ,您必须将其与您的应用程序一起复制到其最终目的地,否则它将永远找不到您的 dll。

      希望对某人有用。

      克里斯蒂安

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多