Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#声纳分析中排除生成的代码_C#_Sonarqube - Fatal编程技术网

从C#声纳分析中排除生成的代码

从C#声纳分析中排除生成的代码,c#,sonarqube,C#,Sonarqube,因此,在VS2013中,我们有一个选项“抑制来自生成代码的结果(仅受管理)” 在通过声纳进行分析时,我们是否有类似的选择 如果未选中上述选项,下面的代码将报告违规行为,但我在SONAR中没有看到任何使用上述选项的选项。 我确实尝试了Sonar.dotnet.excludeGeneratedCode=true选项,但似乎没有任何区别 public IEnumerable<string> YieldTest() { foreach(var num in E

因此,在VS2013中,我们有一个选项“抑制来自生成代码的结果(仅受管理)

在通过声纳进行分析时,我们是否有类似的选择

如果未选中上述选项,下面的代码将报告违规行为,但我在SONAR中没有看到任何使用上述选项的选项。 我确实尝试了
Sonar.dotnet.excludeGeneratedCode=true
选项,但似乎没有任何区别

    public IEnumerable<string> YieldTest()
    {
        foreach(var num in Enumerable.Range(100, 100))
            yield return string.Format("{0}", num);
    }
public IEnumerable YieldTest()
{
foreach(可枚举范围(100100)中的var num)
产生返回字符串。格式(“{0}”,num);
}

我使用此属性集运行,它不包括生成的代码

sonar.exclusions=**/*.Tests/**,**/*Language.Designer.cs,**/*.generated.cs
如果我们仔细研究,排除包含以下部分:

  • /*.Tests/==>排除文件夹中以.Tests结尾的所有代码(递归)
  • **/*Language.Designer.cs==>排除所有资源id文件
  • **/*.generated.cs==>排除以.generated.cs结尾的所有文件

如果使用其他生成的文件(如winforms designer文件),则需要询问自己的掩码

在生成过程中启动FxCop时,MSBuild SonarQube Runner(至少在1.0和1.0.1版本中)始终强制选中“抑制生成代码的结果(仅限托管)”标志。看

通过查看在
runcodealysis:
阶段启动的命令,可以在构建日志中验证此行为:

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规则将不理解此标志,并且仍将报告该方法

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

sonar.exclusions=**/*.Tests/**,**/*Language.Designer.cs,**/*.generated.cs

因此,在SonarQube中,您不应该看到
CA1305
的问题,无论您是否在项目中检查了“抑制生成代码的结果(仅限管理)”。

I Filip,我尝试过这种方法,但似乎不起作用。分析器如何知道应该将该方法排除在分析之外?您是否使用了一些特殊属性来标记它,是在特定命名的文件中还是在特殊的项目类型中?您好,Dinesh,我尝试使用[GeneratedCode]属性来标记该方法,但没有任何帮助。如果您在Visual Studio中分析上述方法时,未选中上述选项,我会得到CA1305的冲突,选中后,我不会得到任何冲突。好的,我设法在VS2015中重现了这种行为。现在,你到底面临什么问题?CA1305在SonarQube中报告,但在设置“抑制来自生成代码的结果”标志时不在Visual Studio中报告?还是另一个问题?嗨,迪内什,是的,这就是我面临的问题。如果我们能有一个类似的选项来抑制声纳上生成的代码,那就太好了。谢谢。嗨,Dinesh,我刚刚检查了日志,正在使用“/forceoutput/searchgac”标志调用FxCop,我没有看到/ignoregeneratedcode:(.我必须对SONAR进行任何配置更改才能激活此标志吗?正如您在MSBuild SonarQube Runner源代码中看到的,它确实尝试将此标志强制设置为
true
。我可以想象的是,其他一些自定义目标稍后再次将其设置为
false
。您是否可以尝试将该方法放入新的控制台应用程序中应用程序项目(使用默认的.csproj文件)?如果这没有帮助,您可以尝试从另一台计算机上运行分析吗?您还可以提供您正在使用的生成项目的MSBuild版本吗?我们已经对12和14进行了深入测试。我正在试用MSBuild Runner,它将更新您。谢谢。我忘了提到,我使用的不是MSBuild Runner,而是Sonar Runner。您好,Dinesh,我尝试了out MsBuild运行程序并且它现在忽略生成的代码,我的安装程序使用的是SONARQube运行程序。能否在SONAR运行程序中设置此标志?如果不能,则我将不得不迁移到MsBuild运行程序:(。感谢您的帮助。