博客文章

为什么 PackageConsumer 不是可有可无

解释为什么 enterprise 模板里的 PackageConsumer 不是演示项目,而是发包闭环里最能提早暴露问题的一环。

很多人复制 enterprise 模板时,最想先删掉的通常是 PackageConsumer
理由也很统一:

  • 本地 ProjectReference 已经能跑了
  • 这看起来像额外示例项目
  • 发包前再验证也不晚

但真正吃过亏以后,通常就不会再把它当成“可选项”了。

Package、PackageConsumer 与闭环验证之间的关系

为什么本地引用通过,不代表发包一定没问题

ProjectReference 通过,只能说明:

  • 你当前解决方案里的工程引用关系是通的

它不能证明下面这些事也一定没问题:

  • PackageId、版本号和包描述是否正确
  • .targets、分析器资产和生成器资产是否真的进了包
  • 外部项目通过 PackageReference 引入后,行为是否和本地工程引用一致

这些问题一旦拖到发包当天再发现,排查路径会非常长。

PackageConsumer 真正拦的是什么

它拦的不是“模板是否能编译”,而是:

  • 打包产物是否还能被真实消费
  • 消费端能否拿到 analyzer 与 generator 的完整效果
  • 包发布链路里那些只在 NuGet 形态下才出现的问题

这类问题最典型的特征就是:

  • 本地 sample 很正常
  • 一旦切到包消费,马上行为不一致

为什么这一步特别适合放在模板里

因为模板最大的价值,不是让你少打一行命令,而是提前把那些高概率踩坑的位置钉死。
PackageConsumer 就属于这种“平时嫌多,真出事时最值钱”的结构。

它会迫使你在最早阶段就回答三个问题:

  • 这套包的真实消费方式是什么
  • 消费端要不要额外配置
  • 打包后的体验和本地调试是否一致

一句话结论

PackageConsumer 不是为了显得流程完整,而是为了尽早证明“这套生成器在包形态下仍然是真的可用”,这一步越晚做,回归成本越高。

标签

分类