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

问题描述 投票:1回答:1

我在开发机器上使用ReSharper 2017.2.2和Visual Studio 2017.5。

我正在使用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列表中。

tfs resharper tfsbuild code-analysis tfs2017
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.