c# - 从 C# SONAR 分析中排除生成的代码

标签 c# sonarqube

所以在 VS2013 中我们有一个选项“抑制生成代码的结果(仅限托管)

在通过 SONAR 执行分析时,我们是否有类似的选项?

当上述选项未选中时,以下代码会报告违规,但我在 SONAR 中看不到任何使用上述选项的选项。 我确实尝试了 Sonar.dotnet.excludeGeneratedCode = true 选项,但似乎没有任何区别。

    public IEnumerable<string> YieldTest()
    {
        foreach(var num in Enumerable.Range(100, 100))
            yield return string.Format("{0}", num);
    }

最佳答案

在构建期间启动 FxCop 时,MSBuild SonarQube Runner(至少在版本 1.0 和 1.0.1 中)始终强制检查“从生成的代码中抑制结果(仅限托管)”标志.参见 SonarQube.Integration.targets#L342

您可以在构建日志中验证此行为,方法是查看在 RunCodeAnalysis: 阶段启动的命令:

RunCodeAnalysis:
  Running Code Analysis...
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe 
  /outputCulture:1033
  /out:"bin\Debug\ConsoleApplication1.exe.CodeAnalysisLog.xml" /file:"bin\Debug\ConsoleApplication1.exe" /ruleSet:"=C:\Users\dinesh\Desktop\tmp\ConsoleApplication1\.sonarqube\conf\\SonarQubeFxCop-cs.ruleset"
  [... references ...]
  /rulesetdirectory:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\\Rule Sets"
  /rule:"-C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\\Rules"
  /searchgac /ignoreinvalidtargets /forceoutput /successfile **/ignoregeneratedcode** /saveMessagesToReport:Active /timeout:120 /reportMissingIndirectAssemblies

您应该看到 /ignoregeneratedcode 被传递给 FxCopCmd.exe。

现在,只有 FxCop 规则会被这个标志抑制。例如,StyleCop 和 ReSharper 规则将无法理解此标志,但仍会报告该方法。

仅供引用,由于存在 yield 语句,FxCop 似乎排除了此方法:C# 编译器会在程序集中为此语句生成相当复杂的 IL 代码。 FxCop 分析程序集(而不是源代码),这就是它必须将 yield 语句视为生成代码的原因。

因此,在 SonarQube 中,您不应该看到 CA1305 的问题,无论您是否在项目中选中“Suppress Results from generated Code(Managed only)”。

关于c# - 从 C# SONAR 分析中排除生成的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400213/

相关文章:

java - FindBugs 警告 : Inefficient use of keySet iterator

ios - 在 SonarQube 分析中包含 iOS Swift 项目测试数据

java - 无法执行目标 org.sonarsource.scanner.maven 对于 Artifact {null :null:null:jar}: The groupId cannot be empty

c# - .net 客户端使用 X509 证书和用户名/密码身份验证调用 JAX-WS web 服务

c# - 比较已编译的 .NET 程序集?

c# - 如何放置两个 DataValueField?

node.js - 执行 npm run sonarqube-scanner-node 命令时出错

c# - 如何使用 Entity Framework 和存储过程来避免 TimeOut 异常?

c# - 如何设置容器以与 ServiceSTack.Redis 一起使用

java - 无法使用 gson 库反序列化来自 SonarQube 的 JSON 响应