繁体   English   中英

当进程未在当前目录中启动时,无法加载DLL(.NET Core 2.1.4)

[英]Unable to load DLL when process not started in the current directory (.NET Core 2.1.4)

这是一个加载C ++ dll(DllImport)的.NET Core 2.0控制台应用程序。 在所有情况下,它都“在我的机器上工作”(Windows 10,.NET Core 2.1.103)。 但是当部署在暂存环境中时。 如果未从其当前目录执行该exe文件,它将不起作用:如果我从父目录运行该可执行文件,则会收到System.DllNotFoundException: Unable to load DLL '***' : The specified module could not be found. (Exception from HRESULT: 0x8007007E) System.DllNotFoundException: Unable to load DLL '***' : The specified module could not be found. (Exception from HRESULT: 0x8007007E)

问题在于,此过程是以这种方式启动的,我别无选择! (即从位于父文件夹中的父进程开始)

我试图在Main方法中添加一个SetCurrentDirectory + SetDllDirectory ,而没有任何效果。

总结一下:

  • 如果使用dotnet ***.dll从CLI启动该应用程序,则该应用程序可从任何目录运行
  • 如果使用Process.Start()从另一个进程以相同的方式启动应用程序,则它将失败
  • 如果该应用程序以可执行文件的形式发布,则可以使用CLI从其当前目录运行
  • 但是它在父目录中失败,并且当然也使用Process.Start() (这是最终用例)

最后一个细节: DllImportActivator.CreateInstance的上下文中完成(使用Windsor)

有点不高兴...

正如Thomas所建议的那样,它与c ++运行时有关:如果依赖关系都存在于当前的可执行文件目录中,则它在所有情况下均可工作。 在某些情况下,如果不复制这些依赖项,可能会造成一些混乱(可能是运行时安装出现问题)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM