博客文章
为什么 PackageConsumer 不是可有可无
解释为什么 enterprise 模板里的 PackageConsumer 不是演示项目,而是发包闭环里最能提早暴露问题的一环。
很多人复制 enterprise 模板时,最想先删掉的通常是 PackageConsumer。
理由也很统一:
- 本地
ProjectReference已经能跑了 - 这看起来像额外示例项目
- 发包前再验证也不晚
但真正吃过亏以后,通常就不会再把它当成“可选项”了。
为什么本地引用通过,不代表发包一定没问题
ProjectReference 通过,只能说明:
- 你当前解决方案里的工程引用关系是通的
它不能证明下面这些事也一定没问题:
PackageId、版本号和包描述是否正确.targets、分析器资产和生成器资产是否真的进了包- 外部项目通过
PackageReference引入后,行为是否和本地工程引用一致
这些问题一旦拖到发包当天再发现,排查路径会非常长。
PackageConsumer 真正拦的是什么
它拦的不是“模板是否能编译”,而是:
- 打包产物是否还能被真实消费
- 消费端能否拿到 analyzer 与 generator 的完整效果
- 包发布链路里那些只在 NuGet 形态下才出现的问题
这类问题最典型的特征就是:
- 本地 sample 很正常
- 一旦切到包消费,马上行为不一致
为什么这一步特别适合放在模板里
因为模板最大的价值,不是让你少打一行命令,而是提前把那些高概率踩坑的位置钉死。PackageConsumer 就属于这种“平时嫌多,真出事时最值钱”的结构。
它会迫使你在最早阶段就回答三个问题:
- 这套包的真实消费方式是什么
- 消费端要不要额外配置
- 打包后的体验和本地调试是否一致
一句话结论
PackageConsumer 不是为了显得流程完整,而是为了尽早证明“这套生成器在包形态下仍然是真的可用”,这一步越晚做,回归成本越高。