【发布时间】:2021-07-19 14:22:51
【问题描述】:
我在我的开发机器上的本地 Docker 容器中运行 sonarqube:latest 以使某些东西正常工作。
我正在尝试分析一个在 .NET Core 3.1 上运行的 C# 项目。看着this page,我以为我可以使用 .NET Core 全局工具对其进行扫描,但在运行结束步骤时会出现以下错误:
警告:您的项目包含无法使用您正在使用的扫描仪进行分析的 C# 文件。要分析 C# 或 VB.NET,您必须使用适用于 .NET 5.x 或更高版本的 SonarScanner,请参阅https://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html
当我尝试使用 .NET 5 dotnet <path to SonarScanner.MSBuild.dll> 等时也会发生这种情况。它可以很好地扫描我项目中的所有 TypeScript 和 CSS 内容,但最终在 SonarQube 中没有 C# 结果。
知道我做错了什么吗?
更新
在做了一些调试之后,它归结为:
<Target Name="ChangeAliasesOfReactiveExtensions" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'System.Interactive.Async'">
<Aliases>ix</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
我们这样做是因为我们仍在使用早期的实体框架版本。
我假设我们收到错误是因为分析器偶然发现了重复的类型。
有什么方法可以配置 SonarQube,所以这不是问题吗?
更新 2
显然导致所有问题的文件是Directory.Build.targets:
<Project>
<Target Name="ChangeAliasesOfReactiveExtensions" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'System.Interactive.Async'">
<Aliases>ix</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
<PropertyGroup Condition=" '$(IntermediateOutputPath)' != '' ">
<ErrorLog>$(IntermediateOutputPath)\csc_diagnostics.json</ErrorLog>
<RazorCompilationErrorLog>$(IntermediateOutputPath)\csc_razor_diagnostics.json</RazorCompilationErrorLog>
</PropertyGroup>
</Project>
注释掉此文件的内容或将其删除可修复 SonarQube 分析警告并在 SonarQube 中显示 C# 文件。
我可以通过创建一个新的 C# 项目 (dotnet new console) 并使用上述内容创建一个文件 Directory.Build.targets 来重现这一点。
【问题讨论】:
-
嗨,你是如何构建你的项目的?您是否在扫描器
begin和end步骤之间使用/t:Rebuild目标构建它? -
我运行
dotnet build。尝试添加/t:Rebuild但仍然是相同的错误消息。 -
我尝试在为 .NET Core 3.1 配置的全新控制台应用程序上运行扫描程序,并且可以正常工作。所以这是我的项目导致它失败的原因,但我不知道如何调试它。
-
RunAnalyzersDuringBuild=true很好。false需要最新的扫描仪 5.2,但我假设你有那个 -
我尝试了
Aliases目标,它并没有破坏分析。如上所述,使用/v:d构建并检查csc.exe参数是接下来要做的事情。
标签: c# .net-core sonarqube-scan