我时不时地遇到一个奇怪的构建错误,用一个简单但非常不直观的修复。
通常当某些地方被配置为做一些丑陋的事情时:D
显然,如果可以的话,我会“正确”修复它,如果不能,我会记录修复结果......但我真正想做的是在 .csproj 中写一些类似于:
catch(Exception thisSpecificBuildErrorWithCodeXXXOrMessageYYY)
{
log.Error("You've done PPPPP, which causes an error because QQQQQQ. The build is going to fail and the way that you fix it is by doing RRRRRR");
throw;
}
这样该消息就会立即呈现给下一个偶然发现它的开发人员。
MSBuild 有类似的东西吗?
团队 IDE 是 Rider,我们正在使用 .NET vLatest(如果相关)。
执行 MSBuild 任务时,如果成功,任务将返回
true
,否则返回 false
。当任务失败时,任务的调用者将不知道原因。该任务可以生成消息、警告和错误作为输出(可以记录),但 MSBuild 中没有通用功能或工具来扫描任务的输出(例如Csc 任务)以查找特定错误。
您可以创建一个自定义记录器。您需要构建记录器程序集。然后,您需要构建指定自定义记录器的程序集的项目。在某些情况下这可能不切实际。
运行构建然后使用脚本扫描构建中的日志可能会更简单。
但是,在运行编译器之前是否可以执行验证或测试,而不是捕获编译器错误?是否存在可以测试的“丑陋的东西”的特定模式?
您可以将自定义 target 添加到执行验证的 .csproj。使用
BeforeTargets="BeforeBuild"
将目标设置为按目标顺序提前执行。使用错误任务报告失败的验证。您可以完全控制错误消息的内容。