Closed glucaci closed 2 years ago
Hi @glucaci, sorry for taking so long to take a look at this (I refer here to the community thread).
I've tried to reproduce the problem with an empty Asp.Net Core project targeting .net 6 without any luck. What is the version of the analyzer that you're using?
You can find the project I've used here: Repro5466.zip
Could you please upload your reproducer if you have it already? It will save us some time.
Hi,
I can reproduce it with your code.
src/Repro5466/LoggingExtensions.cs(6,36): Error CS8795: Partial method 'LoggingExtensions.TestLog(ILogger, bool)' must have an implementation part because it has accessibility modifiers.
Let me know if you need more information.
Thanks!
Seems to be related to the environment. I've tested on my machine with SonarCloud, the same version of the scanner and dotnet SDK and it's not reproducible. Key differences: windows instead of linux and local environment instead of Azure pipeline.
Would it be possible to share the full build log in verbose mode?
This is the output from dotnet build --verbosity detailed
.
Let me know if you need more verbose.
Seems to be similar to https://github.com/dotnet/docs/issues/27471
I'm not sure if is the same problem locally and on the build environment is everything ok without sonar. Could you upload the build output from your environment?
On my build environment if I don't call dotnet sonarscanner begin
before dotnet build
everything is building without error.
What I found out is that Sonar is replacing all the dotnet analyzers with the sonar analyzers and this is kicking out the Microsoft.Extensions.Logging.Generators.dll
.
If you take a look on the csc
command you will see that only sonar analyzers are listed. On a normal build without dotnet sonarscanner begin
the csc
is including /analyzer:Microsoft.Extensions.Logging.Generators.dll
This following is the build output from the same environment without sonar: build-success.txt
Is this not the same thing as with the Razor
? I saw that the Razor
analyzer is included in the securitycsharpfrontend
plugin which is listed in the SonarQubeAnalysisConfig.xml
<AnalyzerPlugin Key="securitycsharpfrontend" Version="9.4.0-M1.15235" StaticResourceName="SonarAnalyzer.Security-9.4.0-M1.15235.zip">
<AssemblyPaths>
<Path>/tmp/.sonarqube/resources/2/SonarAnalyzer.Security.dll</Path>
<Path>/tmp/.sonarqube/resources/2/Google.Protobuf.License.txt</Path>
<Path>/tmp/.sonarqube/resources/2/Microsoft.AspNetCore.Razor.Language.dll</Path>
</AssemblyPaths>
</AnalyzerPlugin>
That's why I think with the workaround which I posted above everything is working.
Very good point, this could happen because of this: https://github.com/SonarSource/sonar-scanner-msbuild/blob/master/src/SonarScanner.MSBuild.Tasks/Targets/SonarQube.Integration.targets#L601-L603
Yes, I think it should not remove any analyzers or additional files because a lot of source generators is relying on them.
Normally, we should not delete them. There should be a concatenation (in SQAdditionalFiles
) but there seems to be a bug. Would it be possible to share with us the binary logs? These can be generated with /bl:name.binlog
parameter on the build command.
I assume from the failed build
Yes, indeed. I'm sorry, I forgot to mention.
Thanks for the binary logs. I can now confirm that the GetAnalyzerSettings task is removing all the existing analyzers. This is bug since it's not the indented behavior.
I've added an issue to the scanner project: https://github.com/SonarSource/sonar-scanner-msbuild/issues/1211
@glucaci could you please try to set sonar.cs.roslyn.ignoreIssues
to false
as a workaround? This will have the side effect to import all the issues to SQ, even the 3rd party ones, but it should fix the build until we manage to address the root problem.
Thanks for the findings.
I can confirm that with /d:sonar.cs.roslyn.ignoreIssues=false
the build is working as expected.
The list of analyzers
/analyzer:/tmp/.sonarqube/resources/0/SonarAnalyzer.CSharp.dll
/analyzer:/tmp/.sonarqube/resources/0/SonarAnalyzer.CFG.dll
/analyzer:/tmp/.sonarqube/resources/0/Google.Protobuf.dll
/analyzer:/tmp/.sonarqube/resources/0/SonarAnalyzer.dll
/analyzer:/tmp/.sonarqube/resources/1/SonarAnalyzer.CFG.dll
/analyzer:/tmp/.sonarqube/resources/1/SonarAnalyzer.VisualBasic.dll
/analyzer:/tmp/.sonarqube/resources/1/Google.Protobuf.dll
/analyzer:/tmp/.sonarqube/resources/1/SonarAnalyzer.dll
/analyzer:/tmp/.sonarqube/resources/2/Microsoft.AspNetCore.Razor.Language.dll
/analyzer:/tmp/.sonarqube/resources/2/SonarAnalyzer.Security.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Analyzers.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Mvc.Analyzers.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Components.Analyzers.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll
/analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll
/analyzer:/usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/6.0.2/analyzers/dotnet/cs/Microsoft.AspNetCore.App.Analyzers.dll
/analyzer:/usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/6.0.2/analyzers/dotnet/cs/Microsoft.AspNetCore.App.CodeFixes.dll
/analyzer:/usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/6.0.2/analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk.Razor/targets/../source-generators/Microsoft.AspNetCore.Razor.SourceGenerator.Tooling.Internal.dll
/analyzer:/usr/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk.Razor/targets/../source-generators/Microsoft.NET.Sdk.Razor.SourceGenerators.dll
I'm closing this issue since the root cause has been identified in the scanner. This issue is tracked now on https://github.com/SonarSource/sonar-scanner-msbuild/issues/1211
Hi,
Already opened a community topic here but no answer.
Description
When using
[LoggerMessage]
, sonar doesn’t find the generated code.CS8795: Partial method '...' must have an implementation part because it has accessibility modifiers.
Repro steps
dotnet sonarscanner begin
dotnet build
-> this will fail with theCS8795
errorKnown workarounds
Patching the
SonarQubeAnalysisConfig.xml
and add a newAnalyzerPlugin
entry withPath
to theMicrosoft.Extensions.Logging.Generators.dll
.Related information