SonarScanner (C#) 不支持代码内 StyleCop 警告抑制

我正在尝试使用 SonarQube 为我的组织进行静态代码分析。我们所有的 C# 项目都已经启用了 StyleCop,这在代码可读性方面对我们帮助很大。现在我们想利用 SonarQube 进行静态代码分析。

当代码中没有警告抑制时,我能够成功运行分析并生成声纳报告。

问题:Sonarqube 不考虑代码内警告抑制,并且 msbuild 失败。

我创建了一个示例 C# 控制台应用程序项目来演示我面临的问题。

StyleCop 已启用(已安装 nuget:StyleCop.Analyzers v1.1.118)并且警告将转换为错误。以下是规则集的片段

...

...

...

<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">

...

...

<Rule Id="SA1307" Action="Error" />

...

...

该项目有以下文件: 1. Program.cs


// <copyright file="Program.cs" company="PlaceholderCompany">

// Copyright (c) PlaceholderCompany. All rights reserved.

// </copyright>


namespace StyleCopSonarQubeIssue

{

    /// <summary>

    /// The program class.

    /// </summary>

    internal class Program

    {

        /// <summary>

        /// Defines the entry point of the application.

        /// </summary>

        /// <param name="args">The arguments.</param>

        public static void Main(string[] args)

        {

            // Method intentionally left empty.

        }

    }

}


系统信息.cs

// <copyright file="SystemInfo.cs" company="PlaceholderCompany">

// Copyright (c) PlaceholderCompany. All rights reserved.

// </copyright>


namespace StyleCopSonarQubeIssue

{

    using System.Runtime.InteropServices;


    /// <summary>

    /// The sytem info enum.

    /// </summary>

    [StructLayout(LayoutKind.Sequential)]

    public struct SystemInfo

    {

        /// <summary>

        /// Oem Id.

        /// </summary>

        public uint dwOemId;


        /// <summary>

        /// Page size.

        /// </summary>

        public uint dwPageSize;

    }

}


守着一只汪
浏览 138回答 1
1回答

慕仙森

看起来像编译器错误。该错误在于,在某些情况下,要求编译器将分析问题写入文件会阻止编译器生成 .dll/.exe 文件。但是,编译器也不会发出任何错误。当 MSBuild 尝试复制不存在的文件时,构建会在后续步骤中失败。您可以通过执行以下操作来检查您是否受到此错误的影响:禁用 SonarQube/SonarCloud 分析步骤。执行构建并检查它是否成功完成现在,在 MSBuild 步骤中添加以下 MSBuild 参数:/p:ErrorLog=RoslynIssues.json然后检查构建是否仍成功完成。如果 (2) 成功但 (3) 失败,那么您就会受到编译器错误的影响。变通方法/解决方案:该错误已在 MSBuild 16.1 中修复,因此修复方法是升级到最新版本的编译器。如果这不可能,则可以选择通过编辑规则集将所引发问题的严重性从“错误”更改为“警告”。
打开App,查看更多内容
随时随地看视频慕课网APP