Inheritance Protobuf继承层次结构

Inheritance Protobuf继承层次结构,inheritance,protocol-buffers,Inheritance,Protocol Buffers,我有一个基类定义为: [ProtoInclude(100, "Module.v1.DataObject.B, Module.v1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")] [ProtoInclude(101, "Module.v2.DataObject.B, Module.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")] public clas

我有一个基类定义为:

[ProtoInclude(100, "Module.v1.DataObject.B, Module.v1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
[ProtoInclude(101, "Module.v2.DataObject.B, Module.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]    
public class A
    {
        [ProtoMember(1)]
        public string Name;
    }
派生类在两个不同的程序集中定义:

Module.v1具有

[Serializable]
[ProtoContract]
public class B: A
{
        [ProtoMember(2)]
        public int Key;
}
模块2.v2已完成

[Serializable]
[ProtoContract]
public class B: A
{
        [ProtoMember(2)]
        public int Key;
}
当我尝试序列化/反序列化其中一个时,例如Module.v2.DataObject.B,protobuf抛出异常- “类型只能参与一个继承层次结构模块。v2.DataObject.B”


你能帮我纠正一下我在这里可能犯的错误吗?

我无法纠正;我有3个项目:

  • 试验台
  • 第一模块
  • 第二模块
这两个模块都参考了试验台,因为它定义了
A
。然后,这两个模块的输出作为文件在试验台的位置提供,以供加载

我的试验台可以:

static void Main()
{
    var type = Type.GetType("Module.v1.DataObject.B, Module.v1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
    A a = (A)Activator.CreateInstance(type);
    var clone = Serializer.DeepClone(a);
    Console.WriteLine(clone.GetType().FullName);

    type = Type.GetType("Module.v2.DataObject.B, Module.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
    a = (A)Activator.CreateInstance(type);
    clone = Serializer.DeepClone(a);
    Console.WriteLine(clone.GetType().FullName);
}
工作正常,输出:

Module.v1.DataObject.B
Module.v2.DataObject.B

有趣;我将不得不看“无法重新编程”(完整设置见答案)谢谢马克!我错过了早些时候的回复-所以问题是项目有一些构建配置不匹配的解决方法,这解决了问题。