指定DLL引用

时间:2010-03-24 15:39:56

标签: vb.net dll path

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

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

所以,它的设置如下:

C:\原始\风向

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

但我需要设置如下:

C:\新建\风向

program.exe
dllB.dll
dllC.dl

这样它仍然可以在C:\ Original \ dir

中引用dllA.dll

我尝试了以下内容,但无济于事:

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

在运行时,它告诉我它无法找到dllA.dll也许我在编译时只采取了上述步骤?

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

但我认为上面的方法应该工作。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据上面的答案(感谢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。

希望对某人有用。

克里斯蒂安