[英]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()
从另一个进程以相同的方式启动应用程序,则它将失败 Process.Start()
(这是最终用例) 最后一个细节: DllImport
在Activator.CreateInstance
的上下文中完成(使用Windsor)
有点不高兴...
正如Thomas所建议的那样,它与c ++运行时有关:如果依赖关系都存在于当前的可执行文件目录中,则它在所有情况下均可工作。 在某些情况下,如果不复制这些依赖项,可能会造成一些混乱(可能是运行时安装出现问题)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.