2

我托管了两个版本的工作流(WF 4.5)。按照此 MSDN 示例中的说明进行操作 - https://code.msdn.microsoft.com/windowsapps/Side-by-Side-Versioning-0fe24cd3。提供的并行功能允许配置工作流服务,以便使用新的工作流定义创建工作流服务的新实例,同时使用现有定义完成运行实例。

工作流 (xamlx) 使用了在另一个类库“MessageGeneration.dll”中定义的少数函数。这些功能也有变化。因此,工作流和 MessageGeneration.dll 都有两个版本。WF-v1 应使用 MessageGeneration.dll-v1,WF-v2 应使用 MessageGeneration.dll-v2。

任何解决此问题的建议都会有所帮助。谢谢。

4

1 回答 1

1

我不熟悉 WF 流程的工作原理,但是以下方法通常适用于这种情况:

您可以在配置文件 (app.config/web.config) 上为特定版本指定二进制位置,这是 CLR 在解析二进制文件时查找的位置。CodeBase上的一般信息。

这是一个例子:

<dependentAssembly>
            <assemblyIdentity name="assembly name" publicKeyToken="token" culture="neutral" />
            <codeBase version="specific version" href="bin/binary.dll" />
            <codeBase version="specific version" href="bin/subBin/binary.dll" />
        </dependentAssembly>

在这里,binary.dllsubBin是相关二进制文件的 v2。现在,为了让它工作,WF 不应该尝试同时实例化两个二进制文件。这可以通过删除任何查找此二进制文件的公共代码路径来处理。您可能可以使用工厂调用上述二进制文件的方法,该工厂将方法标记为内部,以便当 WF 进程实例化时,不会加载 binary.dll。

由于代码库 href 错误,它将无法加载二进制文件。使用Procmon查看为加载二进制文件而探测的位置。根据 procmon 报告,配置上的路径可以是固定的,也可以是二进制文件。

于 2015-04-23T23:22:48.777 回答