2014-03-05 7 views
4

프로덕션 (릴리스) 빌드에서 정적 코드 분석을 사용할 때 성능 비용이 있습니까?프로덕션 빌드에서 CODE_ANALYSIS를 활성화하지 않는 이유는 무엇입니까?

CI 서버는 C# 프로젝트의 디버그 빌드에서 코드 분석을 실행하지만 릴리스 빌드에서는 정적 코드 분석이 비활성화되어 있습니다 (예 : CODE_ANALYSIS가 정의되지 않음). 프로덕션 빌드에서 코드 분석을 비활성화 할 이유가 없다면 디버그 빌드에 시간을 낭비하고 있습니다.

리플렉터는 코드 분석을 사용하지 않으면 SuppressMessage 특성이 제외되지만 런타임 특성에 영향을주는 추가 특성을 기대하지 않습니다. 이것이 정적 코드 분석을 활성화 한 유일한 효과입니까 (Visual Studio 2013)?

+0

나는 당신이 틀린 각도에서 이것을보고 있다고 생각합니다. 코드 분석은 최적화 된 IL (릴리스 빌드)보다 최적화되지 않은 IL (디버그 빌드)에서 더 나은 결과를 제공 할 가능성이 높습니다. – hvd

+1

릴리스 빌드를 프로덕션 환경으로 구축 및 배포 할 준비가 될 때까지 충분히 지났지 만 코드 분석에서 중요한 코드 재구성과 변경 사항을 다시 테스트해야하는 경고를 수정해야하는 경우 매우 비생산적인 방법입니다. 그것에 대해 가라. 퍼프는 문제가되지 않습니다. –

+0

@hvd 원래 사고의 일부 였지만 코드 분석이 디버그 대 릴리스 빌드에서 다른 결과를 제공한다는 증거는 찾을 수 없습니다. 너는 할수 있니? –

답변

6

가, 예를 들어, 활성화 CODE_ANALYSIS 키워드로 the compiler will remove all [SuppressMessage] attributes from the assembly when it is not enabled를 컴파일 할 때 실제 차이가 있습니다 (그리고 Suppressions이 제거 된 이후 따라서, 명령 줄에서 이후의 FxCop을 실행할 때 메시지가 표시 될 수 있습니다). 내부 시스템에 바이너리를 설치하는 경우 바이너리에 압축을 남기는 것이 좋습니다. 일부 회사에서는 이러한 속성 (및 정당성 속성)의 존재가 민감한 정보를 공개 할 수 있으므로 제 3 자에게 배포 된 어셈블리에서 제거하려고합니다.

DEBUG 빌드에서 코드 분석을 실행하면 더 엄격한 결과가 발생할 수 있으며 대부분 RELEASE 빌드에서 발생하는 특정 최적화로 인해 특정 FxCop 규칙이 손실 될 수 있습니다. 최적화는 상수의 정의 대신에 개인 메소드를 (인라이닝을 통해) 제거하거나 상수에 대한 호출을 값으로 대체 할 수 있습니다. 제거 된 이후 FxCop에서 이러한 항목의 유효성을 검사 할 수 없습니다. 이것은 예상된다.

최상의 결과를 얻으려면 디버그 빌드에서 코드 분석을 실행하십시오. 정보 공개를 최소화하려면 릴리즈 빌드에서 CODE_ANALYSIS 상수를 제거하십시오.

+0

최적화되지 않은 사용되지 않는 코드에 대한 좋은 지적. –

관련 문제