Dynamics 365:实时工作流可加载程序集,后台工作流为何失败?
问题描述
环境信息
- Dynamics 365 On-Premises,版本2014(9.1.3.11)
- .NET Framework 4.6.2
- NuGet包:
Microsoft.CrmSdk.Workflow版本9.0.2.46
现象
开发的多个CodeActivity在实时工作流中运行正常,但切换为后台工作流后,执行时抛出异常:
无法加载文件或程序集 System.Text.Json Version=5.0.0.2
原因解析
1. 运行进程的宿主差异
实时工作流运行在Dynamics 365的IIS前端进程中,该进程的应用目录下已存在System.Text.Json 5.0.0.2程序集——要么是部署CodeActivity时自动同步过来的,要么是网站自身依赖附带的,因此可以正常加载。
而后台工作流由**异步服务(AsyncService)**执行,该服务的运行目录与IIS完全分离,默认不会包含CodeActivity依赖的第三方程序集,自然找不到System.Text.Json。
2. 程序集加载规则不同
IIS进程的web.config中可能配置了程序集绑定重定向,或者全局程序集缓存(GAC)中存在兼容版本,能够自动匹配到System.Text.Json 5.0.0.2。但异步服务的AsyncService.exe.config中没有对应的重定向规则,且该版本的程序集未安装到GAC,导致版本解析失败。
3. 依赖部署的遗漏
Microsoft.CrmSdk.Workflow 9.0.2.46本身并不依赖System.Text.Json,该依赖是你的CodeActivity代码自行引入的。部署时,实时工作流的部署流程(比如插件注册工具的依赖复制选项)会将第三方依赖同步到IIS目录,但异步服务不会自动同步这些外部依赖,必须手动处理。
可行的解决办法
- 将
System.Text.Json5.0.0.2安装到服务器的GAC中,所有进程(包括异步服务)都能从GAC加载该程序集。 - 手动复制
System.Text.Json5.0.0.2程序集到异步服务的运行目录:C:\Program Files\Microsoft Dynamics 365\Server\bin\assembly。 - 编辑
AsyncService.exe.config,添加程序集绑定重定向,将对System.Text.Json5.0.0.2的请求重定向到服务器上已有的兼容版本(如果存在)。
内容的提问来源于stack exchange,提问作者Andrey Bushman
相关产品推荐
相关产品推荐

