我有舊式客戶端,他們使用智能掃描儀和舊版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));
}
}
}
}