C# 反序列化外部加载的程序集类型

C# 反序列化外部加载的程序集类型,c#,dll,.net-assembly,C#,Dll,.net Assembly,我使用 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);

我使用

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
是一个助手,它保存必要的字段和类型,一旦用户明确要求,它可以帮助我创建它的实例

现在,我使用二进制序列化将其保存到一个文件中,包括类型。当我反序列化时,它抛出
SerializationException
,表示找不到
AssemblyNamespace.AssemblyClass
。然而,当我在序列化时强制类型为
AssemblyClass
时,它会正确地反序列化。我觉得我分配了错误的组装类型,是吗?:)


AssemblyNamespace.AssemblyClass
只是已加载程序集的一个示例。

如果此程序集未静态链接到正在执行的程序集,则在尝试反序列化之前,我怀疑您需要将包含此类型的程序集加载到CLR中:

Assembly assembly = Assembly.LoadFile(assemblyPath);
// the assembly containing the type is now loaded into the CLR
// => deserialize now

它在那里,但不是在“AssemblyClass”下,而是在“AssemblyNamespace.AssemblyClass”下,“scope”是错误的,我不知道如何修复它。@aambrozkiewicz,它是您序列化的同一个类吗?在反序列化时,它是否可能是另一个加载到主机程序集中的程序集?