附加文件与配置生成 · 第 5 / 9 篇

一旦开始多文件并组,配置就不再是单文件问题

第二季真正把难度拉高的,不是又多读了几个 JSON,而是多个输入文件怎样稳定地并成同一个输出目标。

很多人第一次看第二案例,会把注意力集中在:

  • 生成器开始读 AdditionalFiles
  • 可以从 JSON 提取配置
  • 还能拿到 MSBuild 元数据

这些当然重要,但还不是第二季真正把难度拉高的地方。

真正的分水岭是:

多个输入文件开始指向同一个输出类。

为什么这和“多读几个文件”不是一回事

如果只是多读几个文件,问题大多还是单文件局部问题:

  • 这份 JSON 能不能解析
  • 这个元数据有没有读到
  • 这个默认值有没有生效

但一旦开始并组,问题类型立刻变了:

  • 哪些文件本来就应该落到同一组
  • 哪些文件其实不该被并在一起
  • 同组里出现冲突时应该怎么失败

这已经不是“文件读没读到”的问题,而是“输出契约怎么定义”的问题。

为什么第二案例必须把“创建”和“合并”拆开

在工程上更稳的做法,是把两件事彻底分层:

  • Create
    • 解释单个输入文件
  • Merge
    • 决定多个输入文件怎样形成最终输出

只有这样,排错时你才能稳定判断:

  • 单文件内容错了,先看创建阶段
  • 输出类数量、条目来源或冲突行为不对,再看合并阶段

如果这两层混在一起,第二季后面所有错误都会看起来像“随机不稳定”。

为什么同组冲突不能靠“默认优先级”糊过去

当多个文件都想并进同一个输出类时,最危险的做法是静默覆盖。

例如:

  • 同名条目重复定义
  • 可见性不一致
  • 一个名字既想当值,又想当父节点

如果生成器在这些情况下继续“猜一个最合理的结果”,调用方只会看到某次构建多了点东西、少了点东西,却不知道变化是从哪里来的。

所以第二案例真正重要的不是“能合并”,而是:

能不能在不合法时稳定失败。

为什么这一步更像架构而不是技巧

因为它直接决定最终输出类型的身份边界。

一旦并组规则不稳,后面就会出现这些问题:

  • 本来应该拆开的配置被揉进一个类
  • 本来应该合并的配置被拆成多个类
  • 某个项目配置一改,生成类数量立刻变化

这类问题在真实项目里往往比“文件解析失败”更难排,因为消费方看到的只是生成结果变了,而不是明显的解析错误。

sample 其实已经在证明这件事

第二案例里真正的重点,不是 shared.release.json 被读进来了,而是它进入后:

  • 怎样和 tutorial.base.strings.json
  • 以及 tutorial.features.strings.json

一起稳定并进 BuildStrings

如果这里的并组契约不稳,这个案例根本没法说明“多文件配置输入”是可维护的。

一句话结论

第二季真正把生成器推进到工程阶段的,不是多了文件输入,而是生成器开始为“多个输入怎样组成一个合法输出”负责。

教程导航

继续阅读

当前文章已经挂到教程顺序中,建议按相邻章节继续。

上一篇 多文件合并成一个输出类时,真正难的不是读文件 第二案例最难稳住的不是把 JSON 读进来,而是多个输入文件如何合法地并成同一个输出类型。 下一篇 一次生成能产出多少个类,分组键早就决定了 第二案例里,多输出组并存不是额外能力,而是分组键稳定之后自然出现的结果。
查看系列目录 查看全部文章

标签

分类