更改波次

更改波次是 MSBuild 中的一组行为变更,你可以通过指定特定标志作为环境变量来选择停用。 这样做的目的是警告你潜在的破坏性更改,以便在这些更改成为标准功能之前灵活地适应这些更改。 特定更改波中的所有功能只能整体启用或禁用,无法单独进行操作。

当你升级到新版 MSBuild 时,潜在的颠覆性更改是默认启用的,但如果某项功能对你的生成产生负面影响,你可以轻松地禁用相应更改波次。 每个更改波都由 MSBuild 版本号(例如 16.8)标识,但设置更改波仅控制可能影响生成过程的某些功能,而不是该 MSBuild 版本中的所有更改。 本文稍后的部分中列出了每个更改波次中的功能。 禁用一个变更波也会禁用更高版本的变更波。

选择停用变更波功能

若要禁用更改波次中的功能,请将环境变量 MSBuildDisableFeaturesFromVersion 设置为包含要禁用的功能的更改波次(或 MSBuild 版本)。 这是为开发这些功能而使用的 MSBuild 版本。 请参阅下面的更改波次与功能的映射。

MSBuildDisableFeaturesFromVersion 值

如果未将 MSBuildDisableFeaturesFromVersion 设置为有效的更改波,则会收到警告和/或默认为特定波形。 下表显示了可能的设置:

MSBuildDisableFeaturesFromVersion 结果 收到警告?
未设置 启用所有更改波,这意味着启用每个更改波背后的所有功能。
任何有效的当前更改波次(例如 16.8 禁用更改波次 16.8 及更高版本后面的所有功能。
无效值(例如,16.9,当有效波为 16.816.10时) 默认为最接近的有效值(升序)。 例如,如果设置 16.9,则默认为 16.10
不轮换(例如,如果最高波为 17.0,则为 17.1 固定为最接近的有效值。 例如,17.1 固定到 17.016.5 固定到 16.8 是的
无效格式(例如,16x817_0garbage 启用所有更改波,这意味着启用每个更改波背后的所有功能。 是的

更改波次和关联的功能

17.10

17.8

17.6

17.4

17.0

更改波次不再旋转

16.8

16.10

常见问题

为什么要每隔一个地定位版本来轮换更改波次?

我们认为,这足以与受影响的人进行讨论,并帮助适应这些变化。

为什么是环境变量而不是项目属性?

在某些情况下,我们希望在 MSBuild 加载项目之前将功能置于更改波下。 因此,更改波需要使用环境变量。

为什么选择退出而不是选择加入?

选择停用对我们来说是一种更好的方法,否则当某项功能影响客户的生成时,我们可能会得到有限的反馈。