2016-05-31 25 views
0

運行時,我希望這個問題不是太具體,有人在那裏可以幫助我...加載Compact Framework的組件,依賴給ReflectionTypeLoadException從LabVIEW

引入一些話: 我們在工作中有一個工具,使我們能夠「遠程控制」運行Windows CE 6.0的嵌入式設備。該工具由一個DLL和一個包含GUI的EXE組成,兩者都使用.NET 4.0。該DLL包含主要邏輯,不僅與所提及的「遠程控制」工具一起使用,還與用於設備軟件更新的網站一起使用。作爲DLL的第三個用途,我們現在希望將其與我們的自動化測試站一起使用,這些測試站使用LabView 2013進行編程。 我們在Windows CE上的「遠程」應用程序使用.NET CF 3.5 SP1。

DLL的工作原理如下:連接到設備後,設備特定的主要可執行文件(netcf)被下載並通過AppDomain.CurrentAppDomain.Load(byte [])加載到DLL的當前AppDomain中。之後,設備主可執行文件的所有依賴項都會被評估(Assembly.GetReferencedAssemblies())並從設備中下載(使用AppDomain.AssemblyResolve事件)。 現在,主設備可執行文件的所有屬性都通過反射讀取並顯示在遠程工具中(使用PropertyGrid)。

這適用於工具和網站。

現在的問題:從LabView內部使用DLL時,它不起作用。 更具體地說:從設備下載程序集並將它們加載到DLL當前AppDomain工作正常,但下載的程序集以某種方式無法解決它們的依賴性,即使它們已加載並存在於AppDomain中!

實施例:

DEVICE.EXE使用Device1.dll和Device2.dll(二者.NET Framework精簡)。 Tool.dll包含主要邏輯,Tool.exe使用Tool.dll(都是.NET 4.0)。工具.exe啓動 - > Tool.dll連接到Device.exe - >下載Device.exe - >將Device.exe加載到Tool.exe/Tool.dll的AppDomain - >檢查Device.exe的依賴關係 - >下載Device1.dll - >將Device1.dll加載到Tool.exe/Tool.dll的AppDomain - >下載Device2.dll - >將Device2.dll加載到Tool.exe/Tool.dll的AppDomain。 => Tool.exe顯示PropertyGrid中的Device.exe/MainClass的所有屬性(由於Device.exe的依賴關係被加載,它可以解析Device.exe中使用的所有類型)。

與LabView相同: LabViewTool.exe開始 - > Tool.dll連接到Device.exe - >下載Device.exe - >將Device.exe加載到LabViewTool.exe/Tool.dll的AppDomain - >檢查Device.exe的相關性 - >下載Device1.dll - >將Device1.dll加載到LabViewTool.exe/Tool.dll的AppDomain - >下載Device2.dll - >將Device2.dll加載到LabViewTool.exe/Tool.dll的AppDomain。 => LabViewTool.exe想要加載Device.exe/MainClass的屬性,但無法通過ReflectionTypeLoadException執行此操作。 LoaderExceptions聲明未找到依賴性Device1.dll和Device2.dll。

有沒有人有關於這裏出了什麼問題的想法?

回答

0

在您的應用程序中使用Assembly.LoadFrom()來添加您的Dll。如果你把它們放在同一個目錄中,應用程序應該選擇它們而不必手動引用它們。

作爲一個平臺的Windows CE有一些DLL運算的問題。小型庫可能無法加載。因此可能需要使用Assembly.LoadFrom才能加載程序集。