2012-03-26 3 views
9

메소드에서 내 로거를 호출 할 때마다 (예 :특정 클래스의 모든 코드 분석 메시지를 표시하지 않을 수 있습니까?

CA1303 : Microsoft.Globalization: 
Method 'Database.Connect()' passes a literal 
string as parameter 'message' of a call to 'ILogger.Debug(string)'. 
Retrieve the following string(s) from a resource table instead: 
"Connecting to database...". 

내가 ILogger의 기능을 사용할 때마다이 경고를 억제하는 방법이 있나요 :

_logger.Debug("Connecting to database..."); 

나는 경고를 얻을? 나는 그것을 사용하고있는 모든 방법에서 그것을 실제로 억제하고 싶지 않다.

+0

를 또는, 대신 자원 테이블에서 문자열을 얻을 수있는 다음 더 이상 경고가되지 않습니다? – Msonic

+0

나도 알아,하지만 나는 로그 메시지를 위해 그것을하고 싶지 않아. – xsl

+0

리터럴로 표시하려면 문자열 앞에 @를 붙입니다. @Debug (@ "데이터베이스에 연결 중 ...") –

답변

3

FxCop/VS 코드 분석이나 CA1303 규칙은 이러한 방식으로 특정 대상을 무시하도록 구성 할 수 없습니다.

  1. 개별적으로,
  2. 이 규칙을 사용하지 않도록 위반을 억제하거나
  3. 대체 당신이 선호하는 방식으로 동작 사용자 정의 규칙 : 당신은 기본적으로 세 가지 옵션이 있습니다. 당신이 CA1303 동작을 제어 할 수 있어야한다고 강하게 느끼는 경우

내가 ... 또한 이런 종류의에 대한 # 3으로 의지하는 경향이 있지만 YMMV,이 https://connect.microsoft.com/VisualStudio에 요청 고려해야 할 일이다 또는 http://visualstudio.uservoice.com/forums/121579-visual-studio.

1

클래스에 GeneratedCode 특성을 적용하면 코드 분석에서 클래스를 분석하지 않습니다.

3

이 문제가 발생하여 가장 쉬운 해결책은 내 로깅 방법의 매개 변수 이름을 "메시지"에서 다른 것으로 변경하는 것이 었습니다.

CA1303은 관련 매개 변수 또는 속성 이름에 "텍스트", "메시지"또는 "캡션"이 포함 된 경우에만 트리거됩니다. 매개 변수가 Console.Write 또는 Console.WriteLine으로 전달되면 매개 변수의 이름도 "값"또는 "형식"일 수 없습니다.

+0

고마워요. 적절한 해결책은'[Localizable (false)] '를 사용하는 것이라고 생각하지만, System.ComponentModel.LocalizableAttribute는 아쉽게도 휴대용 클래스 라이브러리에서 사용할 수 없습니다. 그래서 나는 매개 변수 이름을'message'에서'logMsg'로 바꾸어서 해결했습니다. (CA1704 : IdentifiersShouldBeSpelledCorrectly를 로그 인터페이스에서 제외 시켰습니다.) – hlovdal

13

ILogger 인터페이스를 제어하는 ​​경우 Localizable 특성을 값 false와 함께 사용하여 값을 지역화 할 수 없음을 나타낼 수 있습니다.

예를 들어

:

void Info([Localizable(false)] string message); 
+1

정확하게 필요한 것. 대답으로 표시되어야합니다. –