Dynamics 365 F&O VSTS全量构建后程序集加载失败求助
D365 F&O VSTS全量构建netmodule缺失报错排查方案
问题现象
在VSTS中对MS Dynamics 365 F&O项目执行全量构建时抛出如下错误:
Error The assembly 'Dynamics.AX.ABC, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' failed to load due to the module 'Dynamics.AX.ABC.Class.EInvoiceAPI.netmodule' not being present. Please perform a full build of the module that produced this dll.
其中ABC为客户自定义模型,EInvoiceAPI为项目内类。已执行全量构建、数据库同步、重启IIS与批处理服务、重启VSTS、核查模型引用等常规排障操作后问题仍未解决。
排查与解决步骤
- 强制清理全链路编译缓存
全量构建不会自动清理历史残留的损坏编译产物,必须手动删除所有相关缓存:- 本地开发环境删除路径
C:\Users\<当前登录用户>\AppData\Local\Microsoft\DynamicsAX\VSAssemblies下所有和ABC模型相关的文件 - VSTS构建代理上删除工作目录下
AosService\PackagesLocalDirectory\ABC整个模型文件夹,同时清理代理工作目录下所有obj、bin临时编译目录 - 关闭VS后删除项目根目录下的
.vs隐藏缓存文件夹
- 本地开发环境删除路径
- 定位EInvoiceAPI类的底层编译错误
提示的netmodule缺失是结果错误,不是根因,需要单独编译该类抓取真实报错:- 在VS应用程序资源管理器定位到ABC模型下的EInvoiceAPI类,右键选择「编译」,直接查看输出窗口的详细日志,不要依赖错误列表的汇总信息
- 排查该类是否存在partial类跨模型拆分的情况:如果EInvoiceAPI是partial类,所有分块代码必须存放在ABC模型目录下,跨模型存放partial类会直接导致netmodule生成失败
- 排查类内引用合法性:是否调用了其他模型的internal级方法、是否引用了已被删除的表/枚举/类成员、是否存在未被错误列表捕获的语法问题
- 校验模型配置文件完整性
打开ABC模型的描述文件PackagesLocalDirectory\ABC\Descriptor\ABC.xml,核对两项配置:- 所有依赖模型都已正确添加到
<ReferencedModels>节点,无遗漏 - 如果EInvoiceAPI类调用了第三方托管DLL,确认DLL已存放到ABC模型的
bin目录,且已在描述文件中添加对应程序集引用;这类引用缺失不会直接报DLL找不到,经常伪装成netmodule缺失错误
- 所有依赖模型都已正确添加到
- 修正VSTS构建任务配置
- 检查构建定义中的MSBuild参数,删除
/incremental增量编译参数 - 将构建任务的Clean选项设置为
True,强制每次构建前清空代理工作目录的所有旧产物,禁止复用历史编译文件 - 如果使用私有部署的VSTS代理,检查代理运行服务的账户对PackagesLocalDirectory目录、代理工作目录是否有完整读写权限,权限不足会导致netmodule文件写入失败但不抛出直接错误
- 检查构建定义中的MSBuild参数,删除
- 逐元素定位异常点
以上步骤都未解决问题时,新建一个空的同名测试模型,先导入EInvoiceAPI类编译,确认编译通过后再逐批导入ABC模型的其他元素,每导入一批编译一次,即可定位到具体导致编译失败的异常元素。
内容的提问来源于stack exchange,提问作者Abhilash Abhi
相关产品推荐
相关产品推荐

