这是一个加载C ++ dll(DllImport)的.NET Core 2.0控制台应用程序。它适用于所有情况下“在我的机器上工作”(Windows 10,.NET Core 2.1.103)。
但是当部署在staging环境中时。如果没有从当前目录执行exe,它不起作用:如果我从父目录运行可执行文件,我得到System.DllNotFoundException: Unable to load DLL '***' : The specified module could not be found. (Exception from HRESULT: 0x8007007E)
问题是这个过程是以这种方式启动的,我别无选择! (即从位于父文件夹中的父进程启动)
我尝试在SetCurrentDirectory
方法中添加SetDllDirectory
+ Main
无任何效果。
总结:
dotnet ***.dll
从CLI启动应用程序,则可以在任何目录中使用Process.Start()
从另一个进程以相同的方式启动,则会失败Process.Start()
(这是最终用例)最后一个细节:DllImport
是在Activator.CreateInstance
(使用Windsor)
有点不高兴......
答案 0 :(得分:0)
正如托马斯建议的那样,它与c ++运行时有关:它适用于所有情况,如果依赖项都存在于当前可执行文件目录中。有点令人困惑,因为它在某些情况下工作而不复制这些依赖项(可能是运行时安装的问题)