背景:
我正在尝试创建一个应用程序,用户可以在其中创建可移植类库(PCL)并将其上载到我的软件中。由于我的软件是客户端/服务器架构,我希望在windows,ios,android和windows phone上运行客户端(Xamarin将用于移动设备)。我正在尝试为所有这些客户创建一个PCL
问题:
PCL没有那么多的重载静态方法来动态加载程序集并将其保存在内存中。当我通过网络下载并希望将其反序列化为程序集时,我目前将程序集作为流。 Assembly.Load只接受AssemblyName的字符串(必须位于磁盘上)。
是否有解决方法,另一个库或其他选项从Stream在内存中加载程序集?
public static List<DeviceInformation> DeCompileDevicePackage(Stream ZipStream)
{
List<Assembly> packageassemblies = new List<Assembly>();
ZipArchive archive = new ZipArchive(ZipStream);
foreach (ZipArchiveEntry entry in archive.Entries)
{
using (Stream zipfile = entry.Open())
{
switch (entry.FullName.Substring(entry.Name.Length - 4))
{
case ".dll":
//TestPortable.dll is located in the same folder as the exectuable and this PCL library
AssemblyName assemblyname = new AssemblyName("TestPortable, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
//I want to do something similar below but I want to use zipfile Stream instead of AssemblyName
Assembly assembly = Assembly.Load(assemblyname);
packageassemblies.Add(assembly);
break;
default:
//ignore files
break;
}
}
}
你可以忽略这些邮件,因为我只是在它通过网络后将其解压缩。