Vb.net 指定DLL引用

Vb.net 指定DLL引用,vb.net,dll,path,Vb.net,Dll,Path,我无法设置与可执行文件不在同一目录中的DLL的路径 我有一个对dllA.dll的引用。目前,一切都只是复制到同一个目录,一切都很好;但是,我需要将可执行文件移动到另一个目录,同时仍然引用原始目录中的DLL 所以,它的设置如下: C:\Original\Dir 但我需要将其设置为: C:\New\Dir 这样它仍然能够引用C:\Original\dir中的dllA.dll 我尝试了以下方法,但没有成功: 将dllA.dll的复制本地值设置为false,因为我希望在其原始位置引用它。 在工具>选项>

我无法设置与可执行文件不在同一目录中的DLL的路径

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

所以,它的设置如下:

C:\Original\Dir

但我需要将其设置为:

C:\New\Dir

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

我尝试了以下方法,但没有成功:

将dllA.dll的复制本地值设置为false,因为我希望在其原始位置引用它。 在工具>选项>项目和解决方案>VC++目录下,我添加了C:\Original\Dir的路径 将C:\Original\Dir添加到PATH和LIB环境变量中 在运行时,它通知我它无法定位dllA.dll。也许我采取的上述步骤只在编译时起作用

我找到了这个

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


有什么想法吗?

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

虽然我仍然愚蠢地认为这可以通过指定正确的路径变量来实现,但我还是能够通过向我的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>

从上面的答案开始,谢谢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

希望对某人有用


Kristian

尝试将C:\Original\dir添加到系统范围的路径中。如果您的意思是将C:\Original\dir添加到path环境变量中,那么我最初已经尝试过了。
<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>
 <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>