Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用新版本程序集加载以前版本的工作流_.net_Workflow Foundation - Fatal编程技术网

.net 使用新版本程序集加载以前版本的工作流

.net 使用新版本程序集加载以前版本的工作流,.net,workflow-foundation,.net,Workflow Foundation,我试图找出一种方法来升级worklow运行时使用的程序集(自定义活动),同时仍然能够加载(反序列化)旧实例。 我的情况是这样的: 使用CustomActivitiesv.1.0.0.0创建并持久化工作流实例 部署具有CustomActivitiesv.2.0.0.0的新版本产品 尝试在新运行时中加载以前的工作流 v.1和v.2之间的区别在于,我们在程序集中有一些额外的类。现有类型的结构没有改变,所以我认为二进制反序列化仍然可以工作。 我们正在使用AssemblyResolveevent将所有类型

我试图找出一种方法来升级worklow运行时使用的程序集(自定义活动),同时仍然能够加载(反序列化)旧实例。 我的情况是这样的:

  • 使用
    CustomActivities
    v.1.0.0.0创建并持久化工作流实例
  • 部署具有
    CustomActivities
    v.2.0.0.0的新版本产品
  • 尝试在新运行时中加载以前的工作流
  • v.1和v.2之间的区别在于,我们在程序集中有一些额外的类。现有类型的结构没有改变,所以我认为二进制反序列化仍然可以工作。 我们正在使用
    AssemblyResolve
    event将所有类型从v.1重定向到v.2

    if(args.Name.Contains(“CustomActivities”))
    {
    键入someTypeFromCustomActivities=typeof(WorkflowType);
    从CustomActivities.Assembly返回sometype;
    }
    
    然而,在反序列化过程中的某个时刻,我们会遇到以下异常:

    SerializationException:ID为153的对象实现IObjectReference接口,无法解析其所有依赖项。可能的原因是IObjectReference的两个实例相互依赖

    什么可能导致这种行为?我们如何解决它?
    此外,如果任何人的工作流升级策略不涉及并排运行程序集(同一应用程序域中的旧版本和新版本),他们也会受到欢迎。

    程序集解析事件对更改序列化类型程序集引用没有任何作用。您是否尝试过在机器级别从v1到v2的程序集绑定重定向

    更新:我确实找到了这个链接,其中提到使用绑定重定向,使用appliesTo属性将旧工作流转发到新版本


    程序集解析处理与配置重定向的效果完全相同。理论上,旧数据应该与新类型匹配,因为它们的结构没有任何变化,但工作流运行时仍然会失败,出现上述异常。我正试图从以前遇到过这个问题的人那里得到一些建议,以及他们是如何设计出解决方案的(如果有的话)。-1表示没有答案。这可能是一个很好的评论,虽然我在机场,而我写这在我的手机上,所以我道歉的简短和缺乏清晰度,并在错误的地点有答案。不需要任命。感谢您抽出时间来看问题-1收回:)此博客说:>检查您是否更改了工作流(例如创建了一些新状态),如果是,检查您的持久性数据库中是否有任何持久性工作流。如果有问题,您的问题可能会出现,因为工作流无法再次序列化。>@这可能是你的案子吗?类/工作流结构没有任何变化。此外,我不能只删除持久化的数据,因为这意味着我将丢失活动的生产工作流