我正在尝试找出一种方法来升级我们的工作流运行时(自定义活动)使用的程序集,同时仍然能够加载(反序列化)旧实例。 我的情况如下:
- 已创建并持久化一个带有
CustomActivities
v.1.0.0.0 的工作流实例。 - 部署了一个新版本的产品,其中包含
CustomActivities
v.2.0.0.0。 - 尝试在新运行时中加载以前的工作流。
v.1 和 v.2 之间的区别在于我们在程序集中添加了一些额外的类。现有类型的结构没有改变,因此我认为二进制反序列化仍然可以工作。 我们正在使用 AssemblyResolve
事件将所有类型从 v.1 重定向到 v.2。
if (args.Name.Contains("CustomActivities"))
{
Type someTypeFromCustomActivities = typeof(WorkflowType);
return someTypeFromCustomActivities.Assembly;
}
在反序列化过程中,我们的代码遇到了以下异常:
SerializationException: 对象 ID 为 153 的对象实现了 IObjectReference 接口,但其中某些依赖项无法解决。这可能是因为两个相互依赖的 IObjectReference 实例引起的。
什么可能导致这种行为,我们如何解决?如果有人有一种升级工作流的策略,不需要运行旧版本和新版本的程序集(即同一个应用程序域中的旧版本和新版本),那将不胜感激。