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

UWP原生工具链构建偶发ILC1300内存访问错误的解决咨询

解决UWP Xamarin.Forms原生工具链ILC1300内存访问错误方案

我们开发基于Xamarin.Forms的UWP应用,启用原生工具链构建以追求最佳性能并提交至Windows Store,目标平台覆盖x86|x64|ARM,使用的MSBuild编译脚本如下:

msbuild.exe OUR.UWP.csproj /nologo /nr:false `
/property:projectname="Our-Project" `
/p:AppxBundlePlatforms="x86|x64|arm" `
/p:Platform="x64" `
/p:AppxPackageDir="AppxPackages_Staging" `
/p:AppxBundle=Always `
/p:UapAppxPackageBuildMode="StoreUpload" `
/p:PackageCertificateThumbprint="***" `
/p:PackageCertificateKeyFile="***.pfx" `
/p:PackageCertificatePassword="***" `
/p:Verbosity=detailed `
/p:configuration="Release" /m

在Azure Pipelines结合Azure虚拟机规模集的构建环境中,频繁遭遇以下ILC1300错误:

LOGGERBASEDEXECTASK : ILC error ILC1300: Error while copying file 'C:\a\1\s**.UWP\obj\x86\Release\ilc\in\Microsoft.Graphics.Canvas.winmd' to 'C:\a\1\s\QQPad.Mobile\QQPad.Mobile.UWP\bin\x64\Release\x86\ilc\Microsoft.Graphics.Canvas.winmd': Invalid access to memory location : 'C:\a\1\s**.UWP\bin\x64\Release\x86\ilc\Microsoft.Graphics.Canvas.winmd' [C:\a\1\s**.UWP**.UWP.csproj]

原16核/64GB虚拟机几乎每次构建失败,切换到8核/32GB后仍偶发,40分钟的构建时长导致偶发失败严重拖慢发布效率,以下是针对性解决办法:

1. 限制MSBuild并行构建数

原生工具链中的32位ILC工具存在4GB内存上限,过多并行进程会触发内存溢出。修改MSBuild命令,通过/m:参数明确指定并行数,建议设为4或更低,平衡速度与稳定性:

msbuild.exe OUR.UWP.csproj /nologo /nr:false `
/property:projectname="Our-Project" `
/p:AppxBundlePlatforms="x86|x64|arm" `
/p:Platform="x64" `
/p:AppxPackageDir="AppxPackages_Staging" `
/p:AppxBundle=Always `
/p:UapAppxPackageBuildMode="StoreUpload" `
/p:PackageCertificateThumbprint="***" `
/p:PackageCertificateKeyFile="***.pfx" `
/p:PackageCertificatePassword="***" `
/p:Verbosity=detailed `
/p:configuration="Release" /m:4

2. 拆分多平台构建为独立任务

一次性构建三个平台会同时启动多个ILC进程,内存压力陡增。在Azure Pipelines中拆分任务:

  • 任务1:单独构建x86平台
  • 任务2:单独构建x64平台
  • 任务3:单独构建ARM平台
  • 最后执行打包合并操作

单平台构建的MSBuild示例(以x86为例):

msbuild.exe OUR.UWP.csproj /nologo /nr:false `
/p:projectname="Our-Project" `
/p:AppxBundlePlatforms="x86" `
/p:Platform="x86" `
/p:AppxPackageDir="AppxPackages_Staging/x86" `
/p:AppxBundle=Never `
/p:UapAppxPackageBuildMode="StoreUpload" `
/p:PackageCertificateThumbprint="***" `
/p:PackageCertificateKeyFile="***.pfx" `
/p:PackageCertificatePassword="***" `
/p:Verbosity=detailed `
/p:configuration="Release" /m:4

3. 给32位ILC工具启用大地址感知

在64位系统中,通过editbin.exe给32位的ilc.exe启用大地址感知,使其可使用超过4GB内存:

  1. 定位ILC工具路径(通常为C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VisualStudio\v17.0\Ilc)
  2. 执行命令(需管理员权限):
editbin.exe /LARGEADDRESSAWARE "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VisualStudio\v17.0\Ilc\ilc.exe"

可将此步骤加入Azure Pipelines构建前的脚本环节,确保每次构建前生效。

4. 更新Visual Studio与工具链

微软持续修复ILC工具的内存管理问题,确保构建代理使用最新版本的Visual Studio 2022补丁,优化32位ILC进程的内存占用逻辑。

5. 清理构建缓存

偶发的文件访问错误可能源于缓存损坏,在构建脚本开头添加清理步骤:

msbuild.exe OUR.UWP.csproj /t:Clean /p:configuration="Release"

或直接删除obj和bin目录,避免旧文件干扰新构建的文件复制操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:35:42