我已经托管了两个版本的工作流程(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。
任何解决此问题的建议都会有所帮助。 感谢。
答案 0 :(得分: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>
这里,subBin
下的binary.dll是所讨论的二进制文件的v2。现在,为了实现这一点,WF不应该尝试将两个二进制文件同时实例化。这可以通过删除任何寻找此二进制文件的公共代码路径来处理。您可以使用工厂调用上述二进制文件中的方法,该工厂将标记为internal的方法,以便在WF进程实例化时,不加载binary.dll。
无法加载二进制文件,因为代码库href会出错。使用Procmon查看探测哪些位置以加载二进制文件。根据procmon报告,可以修复配置上的路径,也可以将二进制文件双列化。