TFS 2018中如何让自定义MSBuild构建的警告显示在平台?
我之前也碰到过类似的困扰——在TFS 2018里用自定义批处理+MSBuild构建时,警告全躲在日志里,不像原生Visual Studio Build任务那样直接展示在平台上。后来摸索出几个可行的方案,分享给你:
方法1:让MSBuild直接向TFS上报警告
TFS有专门的MSBuild日志器,能把构建过程中的警告、错误直接同步到TFS构建服务里。你只需要在调用MSBuild的命令里加上这个日志器参数:
msbuild YourSolution.sln /logger:Microsoft.TeamFoundation.Build.Logger.TfsLogger,Microsoft.TeamFoundation.Build.Client /verbosity:normal
- 这个日志器依赖TFS的相关程序集,一般在TFS服务器的安装目录(
C:\Program Files\Microsoft Team Foundation Server 16.0\Tools)或者本地VS的MSBuild扩展目录里,确保MSBuild能找到它。 /verbosity:normal是最低能输出警告的日志级别,你也可以根据需要设为detailed或diagnostic。
用这个方法的话,MSBuild会直接把警告推送给TFS,构建完成后就能在TFS的构建摘要里看到和原生任务一样的警告列表了。
方法2:在批处理里手动解析输出并上报
如果上面的日志器配置有困难,你可以在批处理里捕获MSBuild的输出,然后用TFS提供的命令行接口手动上报警告。示例脚本如下:
@echo off setlocal enabledelayedexpansion :: 执行MSBuild并把输出写入日志文件 msbuild YourSolution.sln /verbosity:detailed > build_output.log 2>&1 :: 遍历日志文件,识别警告行并上报给TFS for /f "tokens=*" %%a in (build_output.log) do ( set "current_line=%%a" :: 匹配包含"警告"或"warning"的行(适配中英文输出) echo !current_line! | findstr /i "警告 warning" >nul if not errorlevel 1 ( :: 调用TFS的日志命令上报警告 echo ##vso[task.logissue type=warning]!current_line! ) )
- 注意调整
findstr的匹配规则,不同项目类型(比如C#、VB、C++)的警告格式可能略有差异,确保能准确命中警告行。 ##vso[task.logissue]是TFS构建任务的标准命令,执行后会把内容直接显示在TFS的构建摘要和日志里。
方法3:改用TFS原生MSBuild任务(最省心)
如果你的批处理只是用来设置环境变量,其实完全可以把变量配置移到TFS构建定义的变量选项卡,或者用PowerShell脚本任务来设置变量,然后直接使用TFS自带的MSBuild任务。这个任务已经内置了和TFS的集成,会自动解析MSBuild的警告和错误,不需要额外配置,还能可视化调整构建参数(目标、属性、平台等),比自己写批处理稳定得多。
内容的提问来源于stack exchange,提问作者shaboinkin
相关产品推荐
相关产品推荐

