当进程未在当前目录中启动时无法加载 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 控制台应用程序。它 "works on my machine" (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)

问题是这个进程是这样​​启动的,我别无选择! (即从位于父文件夹中的父进程启动)

我已经尝试在 Main 方法中添加一个 SetCurrentDirectory + SetDllDirectory w/o 任何效果。

总结一下:

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

有点不爽...

正如 Thomas 所建议的,它与 c++ 运行时有关:如果依赖项全部存在于当前可执行目录中,它在所有情况下都有效。有点混乱,因为它在某些情况下无需复制这些依赖项就可以工作(可能是运行时安装的问题)