2011-09-14 2 views
2

다음 "String.Format()"메서드 매개 변수 유효성 검사에 대한 FxCOP 사용자 지정 규칙을 작성하는 방법을 알려주십시오.string.Format (...)에 대한 사용자 지정 FxCop 규칙을 만드는 데 도움이 필요합니다.

1string.Format ("{0} aaaa {1} bbb", x); // {1}에는 자리 표시 자 교체가 없습니다.

2.string.Format ("aaaa {1} bbb", x); // {1}에는 자리 표시자를 대체하지 않습니다. 문자열 리터럴 안에는 {1} 대신 {0}이 있어야합니다.

감사합니다.

Ranjeet.

답변

1

string.Format() MSDN 설명서를 읽으면이 두 시나리오 모두 런타임시 FormatException 오류가 발생하지 않아야합니까?

필자는 FxCop이 런타임 오류에 대해 유효한 코드로 설계되지는 않았지만 잠재적 인 보안/성능/명명/etc 문제에 대한 어셈블리를 분석하고이를보고한다고 생각합니다. 런타임 오류는 그 기능을 벗어납니다.

+1

실제로 런타임 예외를 유발하는 몇 가지 조건은 정적 분석을 통해 실제로 감지 할 수 있습니다. 잘못된 형식 인수는이 범주에 속합니다. –

+0

@Nicole 실수를 저지른 데 대해 감사드립니다. –

1

맞춤 규칙이 필요한 특별한 이유가 있습니까? FxCop과 함께 제공되는 ProvideCorrectArgumentsToFormattingMethods 규칙은 이미 String.Format 인수를 확인합니다.

+0

안녕하세요, Nicole, FxCOP 10을 사용하고 있습니다.이 규칙을 찾지 못했습니다. 그래서 런타임까지 형식 예외를 찾을 수 없습니다. 란제 트. – Ranjeet

+0

@Nicole Calinoiu - 사용자가 링크하는 규칙은 Visual Studio 2010 용 코드 분석의 일부입니다. 코드 분석은 Premium 및 Ultimate 버전에서만 사용할 수 있습니다. 란지 트 (Ranjeet)가 말한 것처럼이 규칙은 FxCop 10의 일부가 아닙니다. –

3

FxCop 1.35, CA2241에서이를 확인하는 규칙이있었습니다. 서식 지정 방법에 올바른 인수를 제공하십시오. this blog post에 따라 [the] data flow engine 제거로 인해 FxCop 1.36 "에서 제거되었습니다.

이 규칙은 Visual Studio 2010의 코드 분석 (Nicole Calinoiu의 대답 참조)에서 복원 된 것으로 보입니다.하지만 주석에서 언급했듯이 코드 분석은 Premium 및 Ultimate 버전에서만 사용할 수 있습니다.

따라서 어셈블리에서 String.Format에 대한 잘못된 호출을 확인하고 Visual Studio 2010 Premium 또는 Ultimate이없는 경우 FxCop 1.35를 사용해야합니다. 저는 Windows 7 상자에서 FxCop 1.35와 FxCop 10.0을 아무 문제없이 나란히 실행하고 있습니다.