用途:指导在 MSBuild 中编写错误、警告和诊断消息,适用于新增 MSBxxxx 错误码或修改面向用户的诊断文本时参考。
主要能力与规则:每条错误消息应回答三个问题——发生了什么、为什么(文件、属性、期望值等上下文)、用户该怎么做。严重级别按框架判断:条件始终错误则用 ERROR;可能造成构建正确性问题用 WARNING,需考虑 WarnAsError 影响;仅提示信息用 MESSAGE(Normal 或 Low 重要性)。新增警告对使用 -WarnAsError、<TreatWarningsAsErrors>true</TreatWarningsAsErrors> 或 <WarningsAsErrors>MSBxxxx</WarningsAsErrors> 的构建属于破坏性变更,需评估是否用 ChangeWave 门控、是否改为 Message、或直接作为 Error。
错误码范围:MSB1xxx 命令行处理,MSB3xxx 任务,MSB4xxx 引擎,MSB5xxx 跨程序集共享代码,MSB6xxx 工具类。分配流程:打开对应程序集的 Strings.resx,找到底部“Next message code”注释,搜索仓库确认未占用,使用后更新注释。
资源字符串格式:资源名用 FeatureArea.DescriptiveName;值以“MSBxxxx: ”开头;comment 记录 {StrBegin} 标记并说明每个 {N} 占位符。代码中应使用 Log.LogErrorWithCodeFromResources、Log.LogWarningWithCodeFromResources 或 ProjectFileErrorUtilities.ThrowInvalidProjectFile 等方法,禁止字符串拼接。
本地化:错误码不本地化,错误文本本地化;修改资源字符串后需完整构建以生成 .xlf 占位翻译。路径尽量相对项目目录、保留用户写法、通过 IElementLocation 提供文件与行号以支持 IDE 跳转,含空格路径需加引号。
限制:资料未提供具体价格、平台或效果信息;详细步骤参见 assigning-msb-error-code.md 与 Localization.md。