我有旧式客户端,他们使用智能扫描仪和旧版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));
}
}
}
}