2016-11-09 7 views
6

정적 코드 분석을 위해 FxCopCmd 도구를 사용하고 있습니다. 우리는 이미 거대한 코드베이스를 가지고 있었기 때문에 FxCop과 함께 제공되는 baseline.exe 도구를 사용하여 기존 문제를 기준으로 삼았습니다.FxCop : 비동기 메서드에 대한 억제 메시지

C# 클래스에 새 메서드를 추가하면 GlobalSuppression.cs 파일의 일부 억제 메시지가 작동을 멈추고 내가 건드리지 않은 코드에 대한 문제가 발생한다는 것을 알고 있습니다.

예 :

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public async Task<string> method1() 
     { 
      string a = ""; 
      a.Equals("abc", StringComparison.InvariantCultureIgnoreCase); 
      return a; 
     } 

     static void Main(string[] args) 
     { 

     }   
    } 
} 

이 오류 다음 발생 :

CA1031 : Microsoft.Design : Modify 'Program.d__0.MoveNext()' to catch a more specific exception than 'Exception' or rethrow the exception

은 'CA1309 UseOrdinalStringComparison'문제를 억제하기 위해, 나는 추가 파일 GlobalSuppression.cs에서 억제 메시지 다음

[module: SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", Scope="member", Target="ConsoleApplication1.Program.d__0.MoveNext()", MessageId="System.String.Equals(System.String,System.StringComparison)", Justification="")]

하지만 클래스에 메서드를 하나 더 추가하면이 suppressi on 메시지가 작동을 멈 춥니 다. 이는 method1이 비동기 적이므로 컴파일 된 코드 (첫 번째 경우는 <method1>d__0)에 새 클래스 (refer this)가 작성 되었기 때문입니다. 그러나 method1 앞에 다른 메서드를 추가하면 컴파일 된 코드로 만들어진 새 클래스의 이름은 <method1>d__1입니다. 결과적으로, 억제 메시지가 적용되지 않고 FxCop이 다시 코드의 오류를 보여주기 시작합니다.

비동기 메서드에 대한 FxCop 오류를 영구히 억제하는 방법이 있습니까?

+0

Visual Studio 분석을 사용하여 15k + FxCop 문제가있는 프로젝트에서도이 동작을 본 적이 없습니다. 그걸 시도해 봤어? –

+0

프로젝트에 비동기 메소드가 포함되어 있습니까? 문제는 비동기 메서드의 코드를 컴파일해야하기 때문입니다. –

+0

예, 수백 개의 비동기 메소드가 있습니다. 편집 : 나는 방금 FxCop을 다시 실행했습니다. 그 동작은 Visual Studio 분석에서 재현 할 수 없습니다. –

답변

2

그래서 현상금을 설정 한 후에도 문제는 답을 얻지 못했습니다. 그러나 해결 방법을 찾았습니다 (솔루션이 아닌 경우).

언급 된 문제는 비동기 메서드에 대한 컴파일러 생성 코드 때문입니다. FxCopCmd는 dll에서 실행되므로 컴파일러에서 생성 된 코드가 변경되므로 기존 억제 메시지가 쓸모 없게됩니다. 그러나 Visual Studio는 코드 분석을 FxCopCmd 만 사용하여 실행하지 않습니다. 비동기 메서드를 지능적으로 무시하는 코드 분석을 실행합니다. (조사한 바에 따라 비동기 메서드에 대한 코드 분석이 전혀 실행되지 않습니다. 해당 문제가 원인입니다.)

CI 빌드에서 Visual Studio와 동일한 동작을 얻으려면 다음을 사용할 수 있습니다. 코드에서 FxCop 분석을 실행하기위한 fxcoptask.dll. 빌드에 FxCop을 통합하는 방법을 알고 싶으면 this answer을 참조하십시오. 이렇게하면 문제에서 언급 한 문제가 해결됩니다. 또한 많은 사용자 정의 옵션을 제공합니다.