Jenkins执行Sonar MSBuild报错:sonar.cs.fxcop.assembly必须设置
sonar.cs.fxcop.assembly必须设置的问题 针对你在Jenkins中运行Sonar MSBuild时遇到的这个报错,结合你的环境(VS2017社区版、SonarQube 5.6.2、MSBuild Scanner 4.2.0.1214),我整理了几个针对性的解决方案,你可以逐一尝试:
先排查版本兼容性问题
SonarQube 5.6.2是比较老旧的LTS版本,而你使用的MSBuild Scanner 4.2.0是相对较新的版本,两者之间可能存在适配断层。官方兼容矩阵里,SonarQube 5.6.x对应的MSBuild Scanner版本应为2.x系列,4.x系列主要适配SonarQube 6.x及以上版本。如果可以调整版本,建议要么将SonarQube升级到6.x版本,要么把MSBuild Scanner降级到2.x版本(比如2.3.2),这可能从根源上解决兼容性导致的参数缺失问题。手动指定
sonar.cs.fxcop.assembly参数
如果不想调整版本,可以在Jenkins的SonarQube分析步骤中,找到「Additional Properties」(额外属性)输入框,添加指定程序集路径的参数:sonar.cs.fxcop.assembly=**/bin/Release/**/*.dll,**/bin/Release/**/*.exe这里的路径要匹配你项目的实际输出目录,如果是Debug配置就改成
**/bin/Debug/**/*.dll。这个参数直接告诉SonarQube要扫描哪些程序集,补上后就能绕过报错。确认FxCop的配置与项目设置
- 在SonarQube服务器的管理后台,进入「Administration > Configuration > C#」,检查FxCop的安装路径是否正确指向VS2017的FxCop目录,比如:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Team Tools\Static Analysis Tools\FxCop - 确保你的项目启用了Code Analysis:打开项目的
.csproj文件,添加以下配置(如果没有的话):
这样在Jenkins构建项目时,才会生成FxCop的分析报告,SonarQube才能正确读取相关数据。<PropertyGroup> <RunCodeAnalysis>true</RunCodeAnalysis> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> </PropertyGroup>
- 在SonarQube服务器的管理后台,进入「Administration > Configuration > C#」,检查FxCop的安装路径是否正确指向VS2017的FxCop目录,比如:
检查Jenkins的执行流程是否正确
确保你的Jenkins任务执行顺序是:- 执行
SonarQube Scanner for MSBuild - Begin Analysis - 用MSBuild命令重新构建项目(比如
msbuild YourSolution.sln /p:Configuration=Release /t:Rebuild),必须完成构建才能生成程序集和分析报告 - 执行
SonarQube Scanner for MSBuild - End Analysis
跳过构建步骤会导致SonarQube找不到程序集,从而触发这个报错。
- 执行
临时禁用FxCop扫描(可选)
如果你的项目不需要FxCop分析,可以直接禁用它来避免报错:在Jenkins的额外属性里添加sonar.cs.fxcop.enabled=false,或者在SonarQube服务器的插件管理中禁用FxCop插件。
内容的提问来源于stack exchange,提问作者jmet

