我正在尝试找出一种方法来升级我们的worklow运行时使用的程序集(自定义活动),同时仍然可以加载(反序列化)旧实例。 我的情况是这样的:
CustomActivities
v.1.0.0.0 CustomActivities
v.2.0.0.0 v.1和v.2之间的区别在于我们在程序集中有一些额外的类。现有类型的结构没有改变,所以我认为二进制反序列化仍然有效。
我们使用AssemblyResolve
事件
if (args.Name.Contains("CustomActivities"))
{
Type someTypeFromCustomActivities = typeof(WorkflowType);
return someTypeFromCustomActivities.Assembly;
}
然而,在反序列化过程中的某些时候,我们遇到以下异常:
SerializationException:ID为153的对象实现了IObjectReference接口,无法解析所有依赖项。可能的原因是两个IObjectReference实例相互依赖。
可能导致此行为的原因以及我们如何解决这个问题? 此外,如果任何人都有升级工作流程的策略,而不涉及并行程序集(同一应用程序域中的旧版本和新版本),则会受到欢迎。
答案 0 :(得分:2)
程序集解析事件不会更改序列化类型程序集引用。您是否尝试过在机器级别从v1到v2的装配绑定重定向。
更新:我确实找到了这个链接,讨论了如何使用绑定重定向将旧工作流转发到使用applyTo属性的新版本。