2012-08-15 26 views
0

我動態加載dll(dll_1)並從中運行代碼。當(dll_1)使用另一個dll(dll_2)時,會發生此問題。我無法在dll_1中嵌入dll_2。動態加載dll,其中包括外部庫的引用

我使用Assembly.LoadFile,然後CreateInstanceInvokeMember加載dll。

我應該怎麼辦?

回答

2

如果我正確理解你的問題,你想要檢測何時對組件的引用沒有被解析並且能夠調解以確保組件被正確加載。

您可以使用AppDomain.AssemblyResolveEvent來做到這一點。

+0

謝謝,這是一種解決方法。我可以檢測到,dll_2是什麼,它在哪裏?然後加載它(dll_2)以供使用? – Calax 2012-08-15 18:04:42

+0

您可以檢測*正在請求什麼*程序集(該信息在事件參數中提供)。但是,由於您使用這種類型的解決方案,因此.NET不知道它所在的位置。它期待你提供這些信息。 – 2012-08-16 18:28:24

0

最簡單的選擇不是使用LoadFile,而是使用Load,因爲它解析程序集的方式與常規程序集解析的工作方式相同。

下一個選項是預加載依賴關係,或者像Eric J建議的那樣使用AssemblyResolveEvent。如果你走這條路線,請閱讀Suzanne Cook's articles關於加載程序集和綁定上下文(請注意,在同一個博客中有更多相關文章)。

除從鏈接的文章:

LoadFrom優點:

組件可以從多條路徑,不只是從下方ApplicationBase被加載。

將自動找到已經加載在此上下文中的依賴關係。

將自動找到與請求的LoadFrom上下文程序集相同的目錄中的依賴項。