簡體   English   中英

將C#DLL加載到C ++ / CLI-依賴目錄

[英]Loading C# DLL to C++/CLI - dependencies directory

我寫了一個使用其他c#dll庫的dll c ++ / cli庫。 當我將c#dll與調用它的應用程序放在同一文件夾中時,C ++ / cli庫運行正常。 該庫最終將加載到許多應用程序,並且不得將C#dll與應用程序一起復制到目錄中。 它必須與c ++ / cli庫位於同一文件夾中,但是在那種情況下,我有System.IO.FileNotFoundException。 我的建議是手動加載c#庫或更改f.ex所在的路徑。 firefox正在尋找依賴關系,但我嘗試使用LoadLibrary()和Assembly :: LoadFrom()方法來強制從正確的目錄加載。 當然,我將帶有dll的目錄路徑添加到系統PATH中。 我在VS2010上工作。

您無需更改應用程序將在其中查找dll的默認目錄。

在設計時,將您的dll放在一個眾所周知的位置,即您將要部署到的位置。 添加對此的引用,確保將其設置為“永遠不要復制”,否則它將最終出現在bin文件夾中。 您必須執行此操作,否則它將無法編譯。

部署時,您需要一個軟件包來部署常見的dll,每個應用程序都需要一個。 如果appA與AppB相比需要公共dll的舊版本或新版本,請不要創建自己的dll hell版本。

將一個AppDomain.AssemblyResolve事件添加到main(對於Windows應用)。 在運行時,當您在dll中引用類型時,事件處理程序將被觸發,而程序集尚未加載。

在那兒,您可以從眾所周知的位置加載它。 通常在配置中,或在相對路徑中。

E.g.
AllMyApps
  CommonDLLS
  MyFirstApp

因此,您從中加載所需通用dll的路徑將是“ .. \\ CommonDlls \\ MyCommondll.dll”。

注意,您將需要以某種方式保護dll的安全,否則,一個壞人可能能夠將其版本的dll注入您的應用程序,這將是很糟糕的...

您可以使用此機制從遠程服務器或數據庫Blob中獲取dll。

最簡單的情況是只有幾行代碼,只需查找事件即可。 花了我大約15分鍾才能在類似的情況下進行操作。

但是不在這台機器上,否則我將粘貼代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM