我在设置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也许我在编译时只采取了上述步骤?
我能找到这个 C# : Specifying a location for Dll reference
但我认为上面的方法应该工作。
有什么想法吗?
答案 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。
希望对某人有用。
克里斯蒂安