2016-05-31 54 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才能加载程序集。