我使用
加载外部库Assembly assembly = Assembly.LoadFile(assemblyPath);
foreach (Type assemblyType in assembly.GetTypes())
{
if (assemblyType.IsSubclassOf(typeof(Chip.Chip)))
{
Chip.Chip chip = (Chip.Chip)Activator.CreateInstance(assemblyType);
this[chip.Name] = new ChipAssembly()
{
Name = chip.Name,
Description = chip.Description,
Image = chip.Image,
Type = assemblyType
};
}
}
工作正常。 ChipAssembly
是一个帮助器,它包含必要的字段+ Type,帮助我在用户明确要求时创建它的实例。
现在,我使用二进制序列化将其保存到文件中,包括类型。当我反序列化时抛出SerializationException
,说没有找到AssemblyNamespace.AssemblyClass
。但是,当我在序列化时强制键入AssemblyClass
时,它会正确地反序列化。我觉得我以某种方式分配错误的assemblyType,是吗? :)
AssemblyNamespace.AssemblyClass
只是加载程序集的一个示例。
答案 0 :(得分:1)
我怀疑在尝试反序列化之前,如果此程序集没有静态链接到正在执行的程序集,则需要将包含此类型的程序集加载到CLR中:
Assembly assembly = Assembly.LoadFile(assemblyPath);
// the assembly containing the type is now loaded into the CLR
// => deserialize now