在TFS构建中的ReSharper代码质量分析中使用自定义模式

时间:2017-12-07 21:00:43

标签: tfs resharper tfsbuild code-analysis tfs2017

我与Visual Studio 2017.5一起在开发机器上使用ReSharper 2017.2.2。

我正在使用TFS 2017 Update 3。

在TFS服务器上安装了Visual Studio 2017.4和ReSharper CLT 2017.2.2。

我正在使用TFS构建。

我的目标是在构建解决方案时进行代码分析。

enter image description here 我使用Resharper Code Quality Analysis任务。我可以使用sln.DotSettings文件来配置它,该文件位于解决方案的根目录。

标准代码检查ReSharper是否成功运行。我也可以更改此处显示的警告级别https://marketplace.visualstudio.com/items?itemName=alanwales.resharper-code-analysis enter image description here

为此我使用ReSharper -> Options | Code Inspection -> Custom patternsenter image description here

此规则在Visual Studio中运行良好。当我将此规则保存到sln.DotSettings时,会添加以下行:

 <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=4E6B3830DEEA6148909C23CD21C96E28/@KeyIndexDefined">True</s:Boolean>
 <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=4E6B3830DEEA6148909C23CD21C96E28/LanguageName/@EntryValue">JAVA_SCRIPT</s:String>
 <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=4E6B3830DEEA6148909C23CD21C96E28/MatchCatchClauseWithoutExceptionFilter/@EntryValue">False</s:Boolean>
 <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=4E6B3830DEEA6148909C23CD21C96E28/SearchPattern/@EntryValue">debugger</s:String>
 <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=4E6B3830DEEA6148909C23CD21C96E28/Severity/@EntryValue">ERROR</s:String></wpf:ResourceDictionary>

我在JS代码中特意添加了debugger行。但我没有收到关于我的自定义模式的警告。

TFS中的Resharper Code Quality Analysis支持是否使用自定义模式?

更新1 :我通过控制台使用以下命令检查了代码分析的启动:InspectCode.exe -o="C:\temp\Results.xml" --no-swea "C:\BuildAgent\Thompson\_work\23\s\***.sln"

在Results.xml文件中,我找到了所需的行:

<Issue TypeId="StructuralSearch" Severity="ERROR" File="***.WebResources\WebResources\new_\js\forms\***.js" Offset="406-415" Line="13" Message="debugger" />

更新2 :我查看了脚本代码RunResharperCodeAnalysisTool.ps1。在此文件中有以下行:

...
$severityLevels = @{"Hint" = 0; "Suggestion" = 1; "Warning" = 2; "Error" = 3}
...
foreach($issue in $issuesElements) {
    $severity = @($issuesTypesElements | Where-Object {$_.Attributes["Id"].Value -eq $issue.Attributes["TypeId"].Value})[0].Attributes["Severity"].Value

    $severityLevel = $severityLevels[$severity]

    if($severityLevel -ge $severityLevels[$failBuildLevelSelector]) {
        $item = New-Object -TypeName PSObject -Property @{
            'Severity' = $severity
            'Message' = $issue.Attributes["Message"].Value
            'File' = $issue.Attributes["File"].Value
            'Line' = $issue.Attributes["Line"].Value
        }

        $filteredElements.Add($item)
    }
}

Results.xml文件包含以下行:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by JetBrains Inspect Code 2017.2.2 -->
<Report ToolsVersion="109.0.20171006.123742">
  <Information>
    <Solution>..\..\BuildAgent\Thompson\_work\23\s\***\***.sln</Solution>
    <InspectionScope>
      <Element>Solution</Element>
    </InspectionScope>
  </Information>
  <IssueTypes>   
    <IssueType Id="StructuralSearch" Category="Structural Search Highlightings" CategoryId="StructuralSearch" Description="Structural Search Pattern" Severity="INVALID_SEVERITY" />    
    <IssueType Id="WebConfigErrors" Category="WebConfig Errors" CategoryId="WebConfigErrors" Description="" Severity="ERROR" />
  </IssueTypes>
  <Issues>
    <Project Name="***">
      <Issue TypeId="WebConfigErrors" File="***.WebResources\Web.config" Offset="531-650" Line="17" Message="Invalid module qualification: Failed to resolve assembly Microsoft.CodeDom.Providers.DotNetCompilerPlatform" />
      <Issue TypeId="WebConfigErrors" File="***.WebResources\Web.config" Offset="916-1035" Line="20" Message="Invalid module qualification: Failed to resolve assembly Microsoft.CodeDom.Providers.DotNetCompilerPlatform" />
      <Issue TypeId="StructuralSearch" Severity="ERROR" File="***.WebResources\WebResources\new_\js\forms\***.js" Offset="406-415" Line="13" Message="debugger" />
    </Project>
  </Issues>
</Report>

我的自定义模式Severity="INVALID_SEVERITY"不在$severityLevels列表中。

1 个答案:

答案 0 :(得分:1)

由于它与命令行运行良好,似乎问题与TFS方面无关,可能与3方任务更相关。

如果这不适用于Resharper Code Quality Analysis任务,您可以在构建任务期间通过使用命令行任务或自定义扩展来直接调用InspectCode.exe命令。然后将结果文件发布到TFS。

此外,作为一种变通方法,您还可以使用logging commands从powershell脚本返回警告和错误。使用task.logissue type=error时,您可能会失败构建任务,然后无法构建。