Azure构建管道中基于Roslyn生成代码分析独立报告的问题
解决Azure DevOps构建管道中Roslyn代码分析独立报告生成问题
刚从FxCopCmd转到Roslyn分析器吧?我之前也遇到过这个情况——默认情况下Roslyn只会把警告输出到构建日志,不会自动生成可共享的独立报告,不过只要调整下MSBuild配置和添加几个任务就能搞定,具体步骤如下:
1. 修改VSBuild任务的MSBuild参数
首先要给VSBuild任务的msbuildArgs添加生成报告的参数,让Roslyn把分析结果输出为XML格式的独立报告文件。修改后的任务配置如下:
task: VSBuild@1 displayName: 'Build solution **\MySolution.sln' inputs: solution: '$(Parameters.solution)' vsVersion: 15.0 msbuildArgs: '/t:rebuild /p:RunCodeAnalysis=true /p:CodeAnalysisLogFile=$(Build.ArtifactStagingDirectory)\CodeAnalysisReport.xml /p:CodeAnalysisRuleSet=YourCustomRuleSet.ruleset' platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)'
参数说明:
/p:RunCodeAnalysis=true:强制开启代码分析,不受项目配置里的开关影响/p:CodeAnalysisLogFile:指定报告的输出路径,这里放到构建工件暂存目录,方便后续发布给团队/p:CodeAnalysisRuleSet:如果你用了自定义规则集,替换成你的规则集文件名;用默认规则的话可以省略这个参数
2. 添加发布工件任务
生成的XML报告需要发布成Azure DevOps的构建工件,这样团队成员就能从构建详情页下载查看。在VSBuild任务之后添加这个任务:
task: PublishBuildArtifacts@1 displayName: 'Publish code analysis report' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)\CodeAnalysisReport.xml' ArtifactName: 'CodeAnalysisReport' publishLocation: 'Container'
完成后,每次构建结束,团队成员都能在构建页面的「工件」标签里找到这份报告。
3. (可选)转成更易读的HTML报告
如果觉得XML格式不够直观,你可以加个PowerShell脚本任务把XML转成HTML。你需要先准备好一个XSLT样式表文件(可以参考常见的FxCop报告样式,或者自己定制),把它放到代码仓库里,然后用下面的脚本转换:
# 读取XML报告内容 $xmlContent = Get-Content "$(Build.ArtifactStagingDirectory)\CodeAnalysisReport.xml" -Raw # 加载仓库中的XSLT样式表 $xslt = New-Object System.Xml.Xsl.XslCompiledTransform $xslt.Load("$(Build.SourcesDirectory)\Path\To\Your\FxCopReport.xslt") $htmlPath = "$(Build.ArtifactStagingDirectory)\CodeAnalysisReport.html" $xslt.Transform([xml]$xmlContent, $htmlPath)
把这个PowerShell任务放到VSBuild之后、PublishBuildArtifacts之前,再修改Publish任务的PathtoPublish为HTML文件路径即可。
额外注意事项
- 确认项目已经正确引用了Roslyn分析器的NuGet包(比如
Microsoft.CodeAnalysis.FxCopAnalyzers) - 因为你用的是VS 15.0(VS2017),要注意分析器包的版本兼容性,建议使用2.x系列的版本
- 如果项目配置里原本关闭了代码分析,
/p:RunCodeAnalysis=true会强制覆盖这个设置,确保每次构建都运行分析
这样调整后,你就能得到一份可以和整个团队共享的独立代码分析报告啦。
内容的提问来源于stack exchange,提问作者Akhilesh Kudla
相关产品推荐
相关产品推荐

