我正在嘗試使用 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;? ? }}
1 回答

慕仙森
TA貢獻1827條經驗 獲得超8個贊
看起來像編譯器錯誤。
該錯誤在于,在某些情況下,要求編譯器將分析問題寫入文件會阻止編譯器生成 .dll/.exe 文件。但是,編譯器也不會發出任何錯誤。當 MSBuild 嘗試復制不存在的文件時,構建會在后續步驟中失敗。
您可以通過執行以下操作來檢查您是否受到此錯誤的影響:
禁用 SonarQube/SonarCloud 分析步驟。
執行構建并檢查它是否成功完成
現在,在 MSBuild 步驟中添加以下 MSBuild 參數:
/p:ErrorLog=RoslynIssues.json
然后檢查構建是否仍成功完成。
如果 (2) 成功但 (3) 失敗,那么您就會受到編譯器錯誤的影響。
變通方法/解決方案:該錯誤已在 MSBuild 16.1 中修復,因此修復方法是升級到最新版本的編譯器。如果這不可能,則可以選擇通過編輯規則集將所引發問題的嚴重性從“錯誤”更改為“警告”。
- 1 回答
- 0 關注
- 199 瀏覽
添加回答
舉報
0/150
提交
取消