Dynamics 365 V9本地版基于.NET 4.6.2开发插件运行异常求助
问题根因
该问题由Microsoft Dynamics 365 V9本地部署版9.0.3.7的沙箱服务程序集加载逻辑缺陷导致:
- 9.0.2.5及更低版本的
Microsoft.CrmSdk.CoreAssemblies是基于.NET 4.5.2编译的,和本地沙箱服务的解析逻辑适配,所以可以正常从数据库读取加载 - 9.0.2.34版本的CoreAssemblies编译时绑定了.NET 4.6.2的运行时元数据,9.0.3.7版本的沙箱解析器无法识别该标记,会跳过数据库检索步骤直接在本地文件系统查找程序集,最终抛出找不到文件的错误
- Dynamics Online/Dataverse的沙箱运行环境保持持续迭代,早已修复了该加载逻辑缺陷,所以相同程序集可以正常运行
解决方案
- 方案一(最稳妥,无需调整服务器):将
Microsoft.CrmSdk.CoreAssemblies版本降级至9.0.2.5,目标框架改为.NET 4.5.2重新编译插件。该版本是9.0.3.7本地部署版兼容的最高CoreAssemblies版本,常规插件开发需求都可以覆盖,你之前的测试也验证过该组合运行正常。 - 方案二(需升级服务器,支持高版本SDK特性):将本地Dynamics 365实例升级至9.0.10.x及以上累积更新包,微软在9.0.8及之后的累积更新中修复了沙箱服务对.NET 4.6.2程序集的加载逻辑缺陷,升级后重新注册.NET 4.6.2编译的9.0.2.34版本插件即可正常运行。
- 方案三(仅测试环境临时使用):将插件的隔离模式从沙箱调整为完全信任模式,完全信任模式的程序集加载逻辑不会触发该缺陷,但该模式会降低插件运行的安全隔离性,生产环境不建议使用。
注意事项
- 插件开发时所有引用的官方SDK包的
Copy Local属性需设置为False,避免冗余依赖被打包进程序集 - 如果插件依赖第三方程序集,需要使用ILMerge工具将主程序集和所有依赖合并为单个程序集后再注册,避免出现依赖加载失败问题
内容的提问来源于stack exchange,提问作者Juan Stoppa
相关产品推荐
相关产品推荐

