从LabView

时间:2016-05-31 13:02:38

标签: c#

我希望这个问题不是太具体,有人可以帮助我......

有些引言: 我们有一个工具,使我们能够远程控制"我们的嵌入式设备运行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事件)。 现在,主设备可执行文件的所有属性都通过Reflection读取并显示在远程工具中(使用PropertyGrid)。

这适用于工具和网站。

现在的问题是:在LabView中使用DLL时,它不起作用。 更具体一点:从设备下载程序集并将它们加载到DLL当前AppDomain工作正常,但下载的程序集无论如何都无法解析它们的依赖项,即使它们已加载并存在于AppDomain中!

示例:

Device.exe使用Device1.dll和Device2.dll(均为.NET Compact Framework)。 Tool.dll包含主要逻辑,Tool.exe使用Tool.dll(均为.NET 4.0)。

Tool.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。

有没有人知道这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

在您的应用内使用--filter添加您的Dll。如果将它们放在同一目录中,应用程序应该选择它们而不必手动引用它们。

作为一个平台的Windows CE在DLL运行时存在一些问题。小型库可能无法加载。因此,可能需要使用Assembly.LoadFrom()才能加载程序集。