UWP项目Create App Package打包报错:Payload存在相同目标路径文件
问题根因
该报错是由于打包时MSBuild同时解析到了同架构下AOT编译版本和非AOT编译版本的UWP运行时库,两者存在大量同名dll文件,导致Payload路径冲突。
可落地解决方案
- 统一所有Release架构的.NET Native编译配置
打开项目属性页,依次切换到所有Release目标架构(x86/x64/ARM/ARM64)的配置项,进入「生成」选项卡,确认「使用.NET Native工具链编译」的勾选状态完全一致:- 若为提交到应用商店的正式包,建议所有架构都勾选该选项,同时同步勾选「优化代码」选项
- 配置修改完成后清理解决方案、删除obj/bin目录后重新生成再打包
- 手动配置排除重复Payload引用
若上述方案无效,右键项目选择「卸载项目」,再右键选择「编辑.csproj项目文件」,在文件末尾的</Project>标签前添加如下配置:
<PropertyGroup> <!-- 禁用构建时自动生成Appx包 --> <GenerateAppxPackageOnBuild>False</GenerateAppxPackageOnBuild> <!-- 允许跳过重复的Payload文件 --> <SkipDuplicatePayloadFiles>True</SkipDuplicatePayloadFiles> </PropertyGroup> <Target Name="RemoveDuplicateRuntimeDlls" AfterTargets="ResolveAssemblyReferences" BeforeTargets="GetPackagingOutputs"> <ItemGroup> <!-- 移除重复的AOT版本系统库引用,保留非AOT版本(如果全架构开启.NET Native则改为过滤非AOT版本即可) --> <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition=" ($([System.String]::Copy('%(ReferenceCopyLocalPaths.Filename)').StartsWith('System.') Or $([System.String]::Copy('%(ReferenceCopyLocalPaths.Filename)').StartsWith('Microsoft.'))) And $([System.String]::Copy('%(ReferenceCopyLocalPaths.NuGetPackageId)').Contains('-aot')) " /> </ItemGroup> </Target>
保存后重新加载项目,再尝试执行打包操作即可。
- 临时验证方案
可先在「Create App Package」向导中仅选择单架构生成包,确认单架构打包正常后再逐步添加其他架构,排查是否存在特定架构的配置异常。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

