Dynamics CRM 2011 SyncWorkflowExecutionPlugin 找不到程序集
Dynamics CRM 2011 SyncWorkflowExecutionPlugin unable to find assembly
我们的Dynamics CRM 2011服务器突然出现了一个奇怪的错误——通过工作流过程触发插件执行时找不到特定的插件程序集,错误:
[Microsoft.Crm.ObjectModel: Microsoft.Crm.ObjectModel.SyncWorkflowExecutionPlugin]
[324f29aa-6082-ea11-80ee-005056837add: ]
Starting sync workflow 'workflow name', Id: 2d4f29aa-6082-ea11-80ee-005056837add
Sync workflow 'workflow name' terminated with error 'The type initializer for '<Module>' threw an exception.'
异常堆栈跟踪最终导致:
Inner Exception: <CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load while attempting to initialize the default appdomain.
at <CrtImplementationDetails>.ThrowModuleLoadException(String errorMessage, Exception innerException)
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
at .cctor()
Inner Exception: System.Runtime.Serialization.SerializationException: Unable to find assembly 'AssemblyName, Version=8.75.0.267, Culture=neutral, PublicKeyToken=4e4051c21cef725b'.
程序集存在于服务器上,版本、文化和 public 密钥令牌都匹配。奇怪的是,当通过 create/update/etc 请求直接触发执行时,插件步骤工作正常 - 只有当通过工作流触发执行时才会发生错误。通过工作流触发,我并不是说来自该程序集的 运行 代码 activity,我的意思是像这样的情况:
- 实体已创建
- 来自 Assembly1 的 OnCreate 插件运行没有问题
- 更新相关实体的工作流运行,从 Assembly1 触发 OnUpdate 插件 - 错误
这个问题最初是在服务器重启后出现的。另一次重新启动暂时修复了它,直到两天后它又开始发生。我们已经尝试了我们能想到的一切 - 更新程序集,unregistering/re-registering 它,重新启动所有服务,再次重新启动服务器。有谁知道这可能是什么原因以及如何解决?
我们发现问题是由 Windows 更新引起的,该更新在初始重启之前已应用,在服务器上安装了 .NET Framework v4.8。尽管该应用程序仍在使用旧版本,但显然仅安装 v4.8 就足以导致错误。恢复到早期的 .NET 版本解决了这个问题。
我不确定具体的技术原因是什么 - 似乎与 App Domains (https://docs.microsoft.com/en-us/dotnet/api/system.appdomain?view=netframework-4.8) 有关。但如果您遇到类似问题,请检查您的 .NET Framework 版本。
我们的Dynamics CRM 2011服务器突然出现了一个奇怪的错误——通过工作流过程触发插件执行时找不到特定的插件程序集,错误:
[Microsoft.Crm.ObjectModel: Microsoft.Crm.ObjectModel.SyncWorkflowExecutionPlugin]
[324f29aa-6082-ea11-80ee-005056837add: ]
Starting sync workflow 'workflow name', Id: 2d4f29aa-6082-ea11-80ee-005056837add
Sync workflow 'workflow name' terminated with error 'The type initializer for '<Module>' threw an exception.'
异常堆栈跟踪最终导致:
Inner Exception: <CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load while attempting to initialize the default appdomain.
at <CrtImplementationDetails>.ThrowModuleLoadException(String errorMessage, Exception innerException)
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
at .cctor()
Inner Exception: System.Runtime.Serialization.SerializationException: Unable to find assembly 'AssemblyName, Version=8.75.0.267, Culture=neutral, PublicKeyToken=4e4051c21cef725b'.
程序集存在于服务器上,版本、文化和 public 密钥令牌都匹配。奇怪的是,当通过 create/update/etc 请求直接触发执行时,插件步骤工作正常 - 只有当通过工作流触发执行时才会发生错误。通过工作流触发,我并不是说来自该程序集的 运行 代码 activity,我的意思是像这样的情况:
- 实体已创建
- 来自 Assembly1 的 OnCreate 插件运行没有问题
- 更新相关实体的工作流运行,从 Assembly1 触发 OnUpdate 插件 - 错误
这个问题最初是在服务器重启后出现的。另一次重新启动暂时修复了它,直到两天后它又开始发生。我们已经尝试了我们能想到的一切 - 更新程序集,unregistering/re-registering 它,重新启动所有服务,再次重新启动服务器。有谁知道这可能是什么原因以及如何解决?
我们发现问题是由 Windows 更新引起的,该更新在初始重启之前已应用,在服务器上安装了 .NET Framework v4.8。尽管该应用程序仍在使用旧版本,但显然仅安装 v4.8 就足以导致错误。恢复到早期的 .NET 版本解决了这个问题。
我不确定具体的技术原因是什么 - 似乎与 App Domains (https://docs.microsoft.com/en-us/dotnet/api/system.appdomain?view=netframework-4.8) 有关。但如果您遇到类似问题,请检查您的 .NET Framework 版本。