簡體   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