提交含.NET Standard与UWP项目的应用包时PRI文件合并失败求助
解决UWP应用商店提交时PRI文件合并失败的问题
我之前碰到过好多次这种嵌套引用场景下的PRI文件合并失败问题,尤其是涉及.NET Standard+UWP库+UWP主项目的组合,核心原因基本都是资源重复定义或者打包策略冲突,给你几个针对性的解决步骤:
1. 检查.NET Standard项目的嵌入式资源命名
你的.NET Standard项目里有嵌入式资源,UWP打包时会自动把这些资源纳入PRI文件,如果和其他项目的资源重名就会触发合并冲突:
- 右键.NET Standard项目 → 属性 → 生成 → 找到「嵌入式资源」区域
- 给所有嵌入式资源的逻辑名称加个独特前缀,比如
YourTeam.YourLib.Resources.xxx,避免和UWP库/主项目的资源撞名 - 如果这些资源只在.NET Standard内部使用,不需要暴露给UWP,也可以考虑把部分资源的「生成操作」改成
None(按需调整,不影响内部使用的话没问题)
2. 调整UWP项目的资源打包策略
UWP默认会合并所有引用项目的资源,嵌套引用很容易导致重复打包:
- 右键UWP库项目 → 属性 → 打包 → 找到「资源」部分
- 勾选**「不合并引用库的资源」**,让主项目单独处理各个库的资源,避免重复合并
- 对UWP可执行项目做同样的设置检查,确保资源打包逻辑一致
3. 彻底清理缓存后重新生成
很多时候是旧缓存的PRI文件在搞鬼:
- 关闭Visual Studio,删除整个解决方案下所有项目的
bin和obj文件夹 - 删掉根目录的
Packages文件夹(如果存在) - 重新打开VS,右键解决方案 → 清理解决方案 → 重新生成整个解决方案
- 先本地尝试创建应用包,确认能正常生成再提交商店
4. 排查多语言资源冲突
错误提示提到了language-nl(荷兰语),大概率是多语言资源重复了:
- 检查各个项目的多语言.resx文件,看有没有两个项目都定义了
nl语言的同名资源键 - 如果.NET Standard项目不需要对外暴露多语言资源,把多余的语言.resx文件删除或者设置「生成操作」为
None - 确保所有项目的语言代码格式一致(比如统一用
nl而不是nl-NL,避免识别冲突)
5. 手动配置PRI文件合并规则(进阶操作)
如果上面的方法都没用,可以手动控制PRI打包逻辑:
- 在UWP主项目根目录创建
priconfig.xml文件,内容示例如下:
<resources targetOsVersion="10.0.0.0" majorVersion="1"> <packaging> <autoResourcePackage qualifier="Language"/> <excludeResources> <!-- 排除重复的特定语言资源,按需修改 --> <resource qualifier="Language-nl"/> </excludeResources> </packaging> </resources>
- 右键这个文件 → 属性 → 设置「生成操作」为
PRIConfig - 重新生成项目,打包时会按照这个配置排除重复资源
我用这些方法解决过好几次类似的问题,你可以从清理缓存和检查资源命名开始试,大部分情况都能搞定。
内容的提问来源于stack exchange,提问作者Gammed
相关产品推荐
相关产品推荐

