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

编译WinUI Desktop应用出现PRI错误的原因及解决方案咨询

根本原因

该错误本质是WinUI构建阶段生成PRI(包资源索引)文件时,检测到多个完全相同的资源条目导致冲突,结合你给出的项目结构,常见触发场景如下:

  • 你引用的NuGet B、NuGet C、自定义控件库三者中,至少两个包包含了路径、命名完全一致的资源文件(包括resw字符串资源、XAML样式资源、图片/字体等静态资源),传递到主项目后触发重复。
  • 其中某个NuGet打包时存在配置错误,重复嵌入了自身的资源文件,或者未将私有资源标记为不传递,被类库A引用后多次传递到主项目。
  • 类库A自身的资源和引用的NuGet资源命名/路径完全重合,也会触发该错误。
    你此前通过重新打包NuGet临时解决,就是因为重新打包时修正了资源重复嵌入的问题,但没有从根源上避免后续再次出现。
永久解决方案
  • 第一步先定位冲突来源:打开Visual Studio开发者命令提示符,进入项目输出目录,执行makepri.exe dump /if Appx\resources.pri /of res_log.xml /dt detailed,导出所有资源条目到XML文件,搜索重复的资源ID即可精准定位是哪两个包的资源冲突。
  • 如果你自行维护相关NuGet包:打包时在项目文件中给私有资源的引用添加PrivateAssets="all"属性,避免资源被传递到上层引用项目;同时给自身包的所有资源添加统一的命名空间前缀,避免和其他第三方包资源重名。
  • 如果是第三方NuGet包冲突:在主项目的.csproj/.vbproj文件中添加重复资源的排除规则,示例如下:
<ItemGroup>
  <!-- 替换路径为冲突NuGet对应的包路径 -->
  <PRIResource Remove="$(NuGetPackageRoot)冲突包名\版本号\**\*.resw" />
  <Page Remove="$(NuGetPackageRoot)冲突包名\版本号\**\*.xaml" />
</ItemGroup>
  • 临时兼容方案:如果不想排查冲突,可直接在主项目配置中开启PRI生成时自动忽略重复条目,配置如下:
<PropertyGroup>
  <GenerateProjectPriFileAdditionalArguments>/l</GenerateProjectPriFileAdditionalArguments>
</PropertyGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:27:04