编程语言
首页 > 编程语言> > 压缩框架中如何从字节数组加载程序集

压缩框架中如何从字节数组加载程序集

作者:互联网

我有一些使用智能扫描仪和旧版Windows Mobile的旧客户端.结果,我一直在为这些智能设备开发紧凑的框架.我正在编写一个类库,该类库将为扫描仪硬件的接口提供插件类型机制.我希望能够将来自扫描仪制造商的第三方程序集作为嵌入式资源嵌入到插件DLL中.我这样做是为了避免在我的插件系统试图查找插件接口的实现时必须反映所有这些第三方DLL.海峡前进.问题是,有了嵌入式资源,我可以获取程序集的字节,但是紧凑框架中没有System.Reflection.Assembly.LoadAssembly(byte []).仅LoadAssembly(AssemblyName)和LoadAssembly(String).如何在运行时从嵌入式资源加载这些程序集?

这就是我现在所拥有的:

    protected void LoadEmbeddedAssemblies()
    {
        Assembly asm = Assembly.GetCallingAssembly();
        foreach (string resName in asm.GetManifestResourceNames())
        {
            if (resName.EndsWith(".dll"))
            {
                try
                {
                    //this is an embedded assembly
                    using (Stream s = asm.GetManifestResourceStream(resName))
                    {
                        if (s.Length > Int32.MaxValue) throw new IOException("The assembly is to large");
                        byte[] bytes = new byte[s.Length];                            
                        s.Read(bytes, 0, Convert.ToInt32(s.Length));

                        //Assembly.Load(bytes) <- Compact Framework sucks
                    }
                }
                catch (Exception e)
                {
                    Log(new LogMessageRaisedEventArgs("AScannerBase", "LoadEmbeddedAssemblies", "Exception encountered while loading embedded assembly", e.Message));
                }
            }
        }
    }

解决方法:

Compact Framework不支持以这种方式加载程序集.由于运行该应用程序的平台不太可能在给定设备上发生变化,因此只需确定首次运行的设备类型,然后将适当的程序集提取到app文件夹中,加载程序便会为您找到它们.

标签:net-assembly,compact-framework,c
来源: https://codeday.me/bug/20191028/1952929.html