5

코드를 DEBUG 코드로 표시하면 은 RELEASE 모드에서을 실행하지 않지만 여전히 어셈블리로 컴파일됩니까? 내 어셈블리가 여분의 방법으로 부풀어 오르지 않았는지 확인하고 싶습니다.조건부 디버그 - 아직 RELEASE 코드로 컴파일됩니까?

[Conditional(DEBUG)] 
private void DoSomeLocalDebugging() 
{ 
    //debugging 
} 

답변

10

예, 방법은 여전히 ​​ 그러나 컴파일 내장되어 자체.

이 완전히 논리적이다 - Conditional의 포인트는 수신자가 내장되어 있지 때 발신자이 작성 될 때 정의 된 처리기 기호에 의존하기 때문이다.

using System; 
using System.Diagnostics; 

class Test 
{ 
    [Conditional("FOO")] 
    static void CallMe() 
    { 
     Console.WriteLine("Called"); 
    } 

    static void Main() 
    { 
     CallMe(); 
    } 
} 

는 (FOO를 정의하지 않고) 코드를 실행하면 아무런 출력이 없습니다 볼 수 있습니다,하지만 당신은 리플렉터에 보면 당신은 방법이 여전히 볼 수 있습니다 : -

간단한 시험이를 구축 할 수 있습니다.

다른 식으로 표현하면 : .NET 릴리스 된 어셈블리 (우리가 컴파일하는 어셈블리)은 DEBUG 기호가 정의되어 빌드 된 것입니까? 그들이 그렇지 않다면 (그리고 나는 그렇지 않다고 강력히 의심합니다!) Debug.Assert 등으로 전화를 걸 수있는 방법은 무엇입니까?

틀림없이 당신이 나을 개인 방법을 구축 할 때를 포함하지 -하지만 당신이 볼 수 있듯이, 그것은 여전히 ​​내장입니다 - 단순하고 일관성을 위해 합리적이다.

+1

+1 네 말이 맞아. 저를 어리 석다고 생각하는 것은 어땠습니까? – kemiller2002

관련 문제