[英]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.