SonarQube MSBuild runner 不使用添加到项目的移植 FxCop Roslyn 规则
SonarQube MSBuild runner isn't working with ported FxCop Roslyn rules added to projects
目前我们在构建过程中 运行ning SonarQube 分析。我们希望在 Visual Studio 2015 年在本地 运行 我们的质量配置文件。为此,我们为 Visual Studio 创建了一个规则集,并启用了在我们的质量配置文件中启用的规则。 SonarLint 对此进行了整合,但 FxCop 规则未同步(目前)。启用 FxCop 规则后 Visual Studio 冻结。所以这不是我们的选择。
我们尝试过的另一种选择是不创建基于 FxCop 和 Roslyn 的规则集。试图创建一个仅限 roslyn 的规则集。因此,我们已将 FxCop port to Roslyn rules NuGet 包添加到项目中。但是当我们 运行 使用 MSBuild Runner 2.1 的 SonarQube 时,我们收到以下错误:MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.
即使我们没有打开这些规则或使用默认的 Microsoft 规则集,我们也会收到此错误。
当我查看 MSBuild 日志时,我看到以下内容(为了便于阅读删除了很多规则):
/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"
/ruleid:"-Microsoft.Performance#CA1820"
/ruleid:"-Microsoft.Reliability#CA2002"
/ruleid:"-Microsoft.Usage#CA1816
-Microsoft.Usage#CA2208"
/ruleid:"-Microsoft.Usage#CA2216"
/searchgac /ignoreinvalidtargets
/forceoutput /successfile /ignoregeneratedcode /saveMessagesToReport:Active,Excluded
/timeout:120
/reportMissingIndirectAssemblies
Switch '/microsoft.usage#ca2208" /ruleid' is an unknown switch.
Type 'FxCopCmd.exe /?' for help on command-line arguments.
MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.
Code Analysis Complete -- 1 error(s), 0 warning(s)
在这种情况下,SonarQube 似乎没有正确生成 FxCop 参数。有人知道解决这个问题的方法吗?
提前致谢。
我已经创建了一个 GitHub 可以重现此问题的 repro:https://github.com/mvdiemen/SonarQubeFxCopRoslyn
首先,目前 Scanner for MSBuild 不支持 运行 通过 Roslyn 的 FxCop。原因是它公开了旨在由 FxCop 以特定方式使用的规则,这与传递给 Roslyn 的其他规则不同。
您正在使用的分析器,特别是 System.Runtime.Analyzers-1.2.0-beta2
,使用 属性 CodeAnalysisRuleSetOverrides
覆盖 FxCop 的规则集。
MSBuild 具有调用 FxCopCmd.exe
的目标 CodeAnalysis
。由于定义了 CodeAnalysisRuleSetOverrides
属性,FxCopCmd
将接收在 属性.
中定义的所有规则 ID 作为参数
您发布的错误来自 System.Runtime.Analyzers-1.2.0-beta2
分析器在定义 属性 时的拼写错误。 packages\System.Runtime.Analyzers-1.2.0-beta2\build\System.Runtime.Analyzers.props
中缺少分号,导致 FxCopCmd.exe
失败。
请注意,CodeAnalysisRuleSetOverrides
覆盖了由 Scanner for MSBuild(通过另一个 属性、CodeAnalysisRuleSet
)定义的规则集。这是无意的,因为结果 FxCop 将使用您在项目中使用的分析器定义的规则,而不是 SonarQube 服务器中定义的质量配置文件中的活动规则。
我将修复 Scanner for MSBuild 使用的 target
文件以重置 属性 CodeAnalysisRuleSetOverrides
。
要使用 MSBuild 扫描器,您应该删除那些分析器。此处有更多信息:http://docs.sonarqube.org/display/SCAN/From+the+Command+Line
目前我们在构建过程中 运行ning SonarQube 分析。我们希望在 Visual Studio 2015 年在本地 运行 我们的质量配置文件。为此,我们为 Visual Studio 创建了一个规则集,并启用了在我们的质量配置文件中启用的规则。 SonarLint 对此进行了整合,但 FxCop 规则未同步(目前)。启用 FxCop 规则后 Visual Studio 冻结。所以这不是我们的选择。
我们尝试过的另一种选择是不创建基于 FxCop 和 Roslyn 的规则集。试图创建一个仅限 roslyn 的规则集。因此,我们已将 FxCop port to Roslyn rules NuGet 包添加到项目中。但是当我们 运行 使用 MSBuild Runner 2.1 的 SonarQube 时,我们收到以下错误:MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.
即使我们没有打开这些规则或使用默认的 Microsoft 规则集,我们也会收到此错误。
当我查看 MSBuild 日志时,我看到以下内容(为了便于阅读删除了很多规则):
/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"
/ruleid:"-Microsoft.Performance#CA1820"
/ruleid:"-Microsoft.Reliability#CA2002"
/ruleid:"-Microsoft.Usage#CA1816
-Microsoft.Usage#CA2208"
/ruleid:"-Microsoft.Usage#CA2216"
/searchgac /ignoreinvalidtargets
/forceoutput /successfile /ignoregeneratedcode /saveMessagesToReport:Active,Excluded
/timeout:120
/reportMissingIndirectAssemblies
Switch '/microsoft.usage#ca2208" /ruleid' is an unknown switch.
Type 'FxCopCmd.exe /?' for help on command-line arguments.
MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.
Code Analysis Complete -- 1 error(s), 0 warning(s)
在这种情况下,SonarQube 似乎没有正确生成 FxCop 参数。有人知道解决这个问题的方法吗?
提前致谢。
我已经创建了一个 GitHub 可以重现此问题的 repro:https://github.com/mvdiemen/SonarQubeFxCopRoslyn
首先,目前 Scanner for MSBuild 不支持 运行 通过 Roslyn 的 FxCop。原因是它公开了旨在由 FxCop 以特定方式使用的规则,这与传递给 Roslyn 的其他规则不同。
您正在使用的分析器,特别是 System.Runtime.Analyzers-1.2.0-beta2
,使用 属性 CodeAnalysisRuleSetOverrides
覆盖 FxCop 的规则集。
MSBuild 具有调用 FxCopCmd.exe
的目标 CodeAnalysis
。由于定义了 CodeAnalysisRuleSetOverrides
属性,FxCopCmd
将接收在 属性.
您发布的错误来自 System.Runtime.Analyzers-1.2.0-beta2
分析器在定义 属性 时的拼写错误。 packages\System.Runtime.Analyzers-1.2.0-beta2\build\System.Runtime.Analyzers.props
中缺少分号,导致 FxCopCmd.exe
失败。
请注意,CodeAnalysisRuleSetOverrides
覆盖了由 Scanner for MSBuild(通过另一个 属性、CodeAnalysisRuleSet
)定义的规则集。这是无意的,因为结果 FxCop 将使用您在项目中使用的分析器定义的规则,而不是 SonarQube 服务器中定义的质量配置文件中的活动规则。
我将修复 Scanner for MSBuild 使用的 target
文件以重置 属性 CodeAnalysisRuleSetOverrides
。
要使用 MSBuild 扫描器,您应该删除那些分析器。此处有更多信息:http://docs.sonarqube.org/display/SCAN/From+the+Command+Line