SonarQube扫描.NET与Angular混合项目时Angular代码未被分析问题
问题根因
扫不到Angular代码、出现NU1503警告的核心原因非常明确:
- SonarScanner for .NET默认只会自动识别、分析C#/VB.NET这类.NET平台语言项目,你解决方案里的Angular项目是
.esproj格式(Visual Studio内置的单页应用项目模板),不属于.NET标准类库/可执行项目格式,.NET CLI执行restore时识别不了它的构建目标,就会抛出跳过restore的警告,扫描器也不会自动把这个项目里的前端代码纳入分析范围。 - 现有配置只粗略设置了
sonar.sources=src/,既没有排除前端依赖、构建缓存这类不需要扫描的目录,也没指定TS分析依赖的tsconfig路径、没满足TS扫描的前置环境要求,就算路径覆盖到了前端目录,扫描器也不会正常解析TS/Angular代码。
修复步骤
按以下顺序配置即可同时完成C#和Angular代码的扫描:
1. 前置环境检查
- 确认SonarQube服务端已启用SonarJS/TypeScript分析插件(社区版及以上版本默认自带,若被手动禁用先重新启用并重启服务)
- 执行扫描的机器必须安装16及以上版本的Node.js,且执行扫描的终端可以直接调用
node命令(执行node -v能正常输出版本号即可),Sonar的TS/JS分析强依赖Node环境,缺失的话前端代码会直接跳过不扫描。
2. 调整sonar-project.properties配置
不要直接把整个src目录无差别纳入扫描,要明确排除无效目录,指定TS分析的核心配置,参考如下:
sonar.projectKey=it-entwicklung_dotnet_mypoettinger_AYFcAof9yGNGEq-TtfGV sonar.qualitygate.wait=true sonar.sourceEncoding=UTF-8 sonar.projectName=mypoettinger # 全局源码根目录 sonar.sources=src/ # 全局排除规则:跳过前端依赖、构建产物、缓存目录,跳过C#编译生成目录,跳过esproj项目文件本身 sonar.exclusions=**/node_modules/**,**/dist/**,**/.angular/**,**/bin/**,**/obj/**,**/*.esproj # TS/Angular专属配置,替换成你Angular项目实际的tsconfig.json路径 sonar.typescript.tsconfigPath=src/xxx.App/tsconfig.json sonar.javascript.file.suffixes=.js,.jsx sonar.typescript.file.suffixes=.ts,.tsx
注意:
sonar.typescript.tsconfigPath的路径必须和实际文件位置完全匹配,否则TS分析会找不到类型定义,出现大量漏报、误报。
3. 调整扫描执行流程
按顺序执行以下命令,不要直接走默认的.NET扫描流程:
- 先进入Angular项目所在目录,执行
npm install安装完所有前端依赖,再切回解决方案根目录 - 执行扫描初始化命令:
dotnet sonarscanner begin /k:"你的项目Key" /d:sonar.host.url="你的SonarQube服务地址" /d:sonar.token="你的扫描令牌" - 执行解决方案依赖还原:
dotnet restore src/xxx.sln,这里出现的esproj NU1503警告无需处理,是.NET CLI不识别前端项目格式导致的,不影响最终扫描结果 - 执行解决方案编译:
dotnet build src/xxx.sln --no-restore - 执行扫描收尾上传命令:
dotnet sonarscanner end /d:sonar.token="你的扫描令牌"
可选优化
如果不想看到NU1503警告,可以在扫描时临时把Angular的esproj项目从解决方案里排除,或者在build命令里指定只编译C#相关项目——前端代码已经通过sonar.sources的路径配置纳入扫描范围,不需要依赖.NET的构建流程识别。
结果验证
扫描完成后进入SonarQube的项目概览页,查看代码语言分布统计,能同时看到C#和TypeScript的代码行数占比,就说明两类代码都已被正常纳入扫描范围。
内容的提问来源于stack exchange,提问作者Georg Edlbauer
相关产品推荐
相关产品推荐

