2010-03-24 92 views
0

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

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

所以,这就像设置:

C:\原装\迪尔

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

但我需要把它设置,如:

C:\新建\迪尔

program.exe 
dllB.dll 
dllC.dl

S五脏俱全,它仍然能够引用dllA.dll在C:\原装\目录

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

  • 将“复制本地”价值为false DLLA。因为我想让它在原始位置被引用。
  • 在“工具>选项>项目和解决方案> VC++目录”下添加了“C:\ Original \ Dir”路径
  • 对PATH和LIB环境变量都添加了“C:\ Original \ Dir”

在运行时,它通知我它无法找到dllA.dll也许上述步骤我只在编译时考虑问题?

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

但我在想,我应该已经上述方法处理。

任何想法?

回答

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> 
+0

你为什么想要这样做? – Nix 2010-03-25 12:47:33

0

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

+0

“尝试添加C:\原装\目录到全系统的路径:”如果这样,你的意思是添加“C:\ Oriignal \目录”到PATH环境变量,我最初尝试, 。 – KarlHungus 2010-03-24 16:15:05

0

从上面的回答努力克服这个问题(感谢卡尔),这是我不清楚有关语法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> 

为第1 DLL我从引用标签得到的版本号。 查看了很多指定dll位置的方法,这是迄今为止最简单的方法 - 仍然需要我整天完成工作。 最后一块信息是,上面的App.config条目被写出到yourappname.exe.config中,您必须将其与您的应用程序一起复制到其最终目的地,否则它将永远找不到您的dll。

希望对某人有用。

克里斯蒂安