2012-10-04 4 views
2

디버그 모드로 내 로컬 시스템에서 테스트하기 위해 게시 중이며 '#if 디버그'모드가 작동하여 내가 테스트 한 기능을 테스트 할 수 있기를 바랬습니다. 아직 생산을 원하지 않는다.디버그 모드로 게시하지만 컴파일러는 #if 디버그 내에서 코드를 제거합니다.

내가 디버그 모드로 게시 할 때의 Web.config은 여전히 ​​

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
</system.web> 

을 가지고 있지만이 프로젝트의 DLL에이

#if debug 
    PlaceHolder1.Visible = true; 
#endif 

같았다 코드를 반사판을 사용할 때 존재하지 않는다. 컴파일러가 제거했다고 생각합니다.

참고 : 저는 빌드에 대해 이야기하는 것이 아니라 게시하는 것에 대해 이야기하고 있습니다. 위의 코드를 사용하여 디버그 빌드를 수행하면 여전히 작동합니다.

이 예상되는 동작입니까? 디버그 모드로 게시 할 때 컴파일러에서 해당 코드 비트를 포함하도록하는 방법이 있습니까? 나는이 모든 잘못을 저지르고 있는가?

업데이트 : @에 대응 은 /의 내 패키지를 언급 ​​대시 웹 설정은 게시 :

Package/Publish Web settings

+0

이것은 나를 위해 작동 게시 할 때 활성 빌드 구성. – dash

+0

빌드 속성 페이지는 어떻게 생깁니 까? 'Define DEBUG constant '에 체크 표시를 했습니까? 패키지/게시 웹 페이지에서 디버그가 설정되어 있고 빌드 탭에서 해당 옵션을 선택한 다음 게시를 수행하면이 기능이 작동합니다. ILSpy (http://ilspy.net/)를 사용하여 당신이 기대하는 코드가 포함되었습니다. – dash

+0

@dash 예 정의 DEBUG 상수가 체크되어 있지만 그것이 작동하지 않습니다. 내가 게시 한 후 컴파일 된 코드를 확인하기 위해 http://www.reflector.net/을 사용했지만 ILSpy에 대한 팁을 주셔서 감사합니다. 전에는 들어 보지 못했습니다. 이 설정을 다른 설정과 함께 사용하겠습니다. – Dean

답변

1

:

1. Right click on your project choose properties. 
2. Go to the "Build" tab 
3. Select Release in the "Configuration" combobox. 
4. Check the "Define DEBUG constant"-checkbox. 

프로덕션에 배포하기 전에 제거하는 것을 잊지 마세요 있는지 확인합니다.

편집

: 당신이 대신 4 단계의 수 있습니다 소문자 디버그를 사용하고 있기 때문에 4 단계에서 "조건부 컴파일 기호"디버그 (소문자)를 입력 : Conditional compilation symbols

+0

유망한 것으로 보였지만 이미 체크가되어 있습니다 (예, 구성에 대해 '릴리스'를 선택했습니다).나는 "코드 최적화"체크 상자가 디버깅을 위해 체크되지 않았지만 릴리즈에 체크 표시가되어있는 구성을 변경할 때주의를 기울였습니다. – Dean

+1

대소 문자를 구별하여 #if 디버그를 작성해야합니다. – haiiaaa

+0

web.config 소문자 디버그가 있습니까? 그들은 관련이 없는가? – Dean

2

네, 예상되는 행동. 조건부 컴파일 지시문 (예 : #if debug)은 컴파일 타임에만 고려됩니다. C# 코드는 빌드 할 때 컴파일됩니다. 그렇다면 당신이 지적한 compilation debug 옵션은 무엇입니까? 확실하지는 않지만 aspx 페이지를 컴파일하는 방법이나 웹 사이트가 빌드 된 코드를 실행하는 방법을 변경한다고 생각합니다. 코드가 빌드 될 때 대신 페이지가 표시되기 바로 전에 발생합니다. Visual Studio에서

4

C# 전 처리기 기호는 대소 문자를 구분합니다. 보십시오 : #의 debug`은 또한 보장하기 위해 프로젝트 속성에서 Web` 설정을 /를 '패키지를 확인 게시해야하는 경우 # DEBUG`가 아니라``Debug` 경우 나는`사용하는 경우

#if DEBUG 
+0

과 관련이 없다는 것을 보여주는 레코드를 보겠습니다. 감사합니다. 나는 그것을 처리했고, 모든 소문자 디버그를 사용했습니다. 하지만 이건 내 문제를 해결하지 못합니다 – Dean

+0

당신이 옳았어요, 사과하고 고마워요! 그러나 여기서 일어나는 일을 이해하는 핵심은 web.config에 정의 된 디버그가 DEBUG 상수와 관련이 없으며 속성 창에서 변경할 수 있다는 것입니다. – Dean

관련 문제