Vb.net 指定DLL引用
我无法设置与可执行文件不在同一目录中的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。也许我采取的上述步骤只在编译时起作用 我找到了这个 但我认为我的上述方法应该奏效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,因为我希望在其原始位置引用它。 在工具>选项>
有什么想法吗?编译时设置不会影响运行时路径。尝试添加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>