You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI发布模式调用ASMX SOAP服务XML序列化报错求助

.NET MAUI Release模式调用ASMX SOAP服务XML序列化报错排查

问题背景

在.NET MAUI中调用ASMX SOAP服务时,Debug模式运行正常,但切换到Release模式构建后出现XML序列化错误,报错链如下:

外层错误:

"There was an error in serializing body of message <x>: 'There was an error generating the XML document.'.  
Please see inner exception for more details.   
At System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.SerializeBody(XmlDictionaryWriter writer, MessageVersion version, String action, MessageDescription messageDescription, Object returnValue, Object[] parameters, Boolean isRequest)

内部异常:

There was an error generating the XML document   
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)

深层内部异常:

Invalid IL code in Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterLDBServiceSoap:Write63_Item. 

排查解决提示

  • 禁用AOT编译:Release模式下的AOT编译会提前编译代码,但XmlSerializer运行时动态生成的序列化代码无法被AOT正确处理。修改项目的.csproj文件,在Release配置的PropertyGroup中添加:
    <AotCompilation>false</AotCompilation>
    
  • 调整代码裁剪策略:默认的Release代码裁剪会移除Xml序列化所需的元数据,导致动态生成的IL代码无效。可以:
    • 将裁剪模式改为部分裁剪:在Release配置中添加<TrimMode>partial</TrimMode>
    • 保留Xml序列化相关程序集的元数据:添加<TrimmerRootAssembly Include="System.Xml.Serialization" />
  • 预生成Xml序列化程序集:避免运行时动态生成代码的不确定性,使用sgen.exe工具预编译实体类对应的序列化程序集,将生成的程序集引用到项目中。
  • 校验实体类序列化特性:确保SOAP服务对应的实体类标记了正确的序列化属性(如[Serializable]、[XmlRoot]、[XmlElement]等),排查是否存在XmlSerializer不支持的复杂类型(如未正确处理的泛型嵌套、私有字段等),Debug模式下的宽松处理可能掩盖了这些问题。
  • 开启Release模式调试符号:虽然无法单步调试,但可以配置生成调试符号,结合日志输出定位具体出错的实体或属性。在Release配置中添加:
    <DebugType>pdbonly</DebugType>
    <DebugSymbols>true</DebugSymbols>
    
  • 升级.NET MAUI版本:部分旧版本的.NET MAUI在XmlSerializer与Release优化的兼容性上存在已知问题,升级到最新稳定版可能解决该bug。

内容的提问来源于stack exchange,提问作者Haz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:38:22