#if RELEASE가 C#에서 DEBUG가 #처럼 작동합니까?
#if 컴파일러 디렉티브의 모든 예에서 "DEBUG"를 사용합니다.디버그 모드에서 컴파일할 때 실행하지 않을 코드를 제외하는 경우와 동일한 방법으로 "릴리스"를 사용할 수 있습니까?이 블록으로 둘러싸려는 코드는 많은 이메일을 보내고 테스트할 때 실수로 이메일을 보내고 싶지 않습니다.
RELEASE정의되지 않았지만 사용할 수 있습니다.
#if (!DEBUG)
...
#endif
아니요, 당신이 일을 하지 않는 한 그럴 수 없어요.
여기서 중요한 부분은 DEBUG가 실제로 무엇인지이며, 컴파일러가 확인할 수 있는 일종의 상수입니다.
프로젝트 속성을 확인하면 빌드 탭 아래에 다음과 같은 세 가지가 있습니다.
- "조건부 컴파일 기호"라는 텍스트 상자
- DEBUG 상수 정의 확인란
- "Define TRACE constant"(TRACE 상수 정의) 확인란
RELEASE라는 이름을 가진 확인란이나 상수/기호가 미리 정의되어 있지 않습니다.
그러나 조건부 컴파일 기호라는 텍스트 상자에 해당 이름을 쉽게 추가할 수 있지만 프로젝트 구성을 릴리스 모드로 설정한 후에 이 설정을 구성별로 지정해야 합니다.
그래서 기본적으로, 당신이 그것을 텍스트 상자에 추가하지 않는 한,#if RELEASE어떤 구성에서도 코드를 생성하지 않습니다.
아니.
디버그 구성 중에 다음이 있습니다.DEBUG정의된 상수(Visual Studio에 의해 자동으로 정의됨)를 표시합니다.빌드 중인 프로젝트 설정을 확인합니다.
Project -> Build에서 [Define DEBUG constant]를 선택하는 것은 모든 파일의 시작 부분에 #define DEBUG를 포함하는 것과 같습니다.
릴리스 구성에 대해 RELEASE 상수를 정의하려면 다음으로 이동합니다.
- 프로젝트 속성 -> 빌드
- 릴리스 모드 선택
- 조건부 컴파일 기호 텍스트 상자에 RELEASE를 입력합니다.
내 VS 설치(VS 2008)#if RELEASE작동하지 않습니다.하지만 당신은 그냥 사용할 수 있습니다.#if !DEBUG
예:
#if !DEBUG
SendTediousEmail()
#endif
전에 본 적이 없는...하지만 나는 본 적이 있습니다.
#if (DEBUG == FALSE)
그리고.
#if (!DEBUG)
그게 당신을 위한 일입니까?
사용할 수 있습니다.#if(!DEBUG)이를 위하여
"팝 카탈린"이 옳았습니다.빌드 유형에 따라 정의를 제어하면 유연성이 크게 향상됩니다.예를 들어 "DEBUG", "DEMO" 및 "REASE" 구성을 모두 동일한 솔루션에 포함할 수 있습니다.따라서 두 가지 솔루션을 사용하여 중복 프로그래밍을 수행할 필요가 없습니다.
그래서 네#if RELEASE또는#if (RELEASE)와동하작함동과 동일하게 합니다.#if DEBUGRELEASE 조건부 컴파일 기호가 정의된 경우.
다음은 "팝 카탈린" 게시물에서 가져온 것입니다.릴리스 구성에 대해 RELEASE 상수를 정의하려면 조건부 컴파일 기호 텍스트 상자에서 * Project Properties -> Build * Select Release Mode *로 이동합니다.
오래된 질문인 것은 알지만 DEBUG 및 릴리스 이외의 TEST 또는 UAT와 같은 자체 구성을 만들 수 있다는 점을 언급할 가치가 있습니다.
그런 다음 프로젝트 속성 페이지의 빌드 탭에서 "조건부 컴파일 기호"를 TEST로 설정하면 다음과 같은 구성을 사용할 수 있습니다.
#if (DEBUG || TEST )
//Code that will not be executed in RELEASE or UAT
#endif
예를 들어, 필요한 경우 다른 클라이언트 또는 전체 웹 메서드와 같은 특정 이유로 이 구성을 사용할 수 있습니다.과거에 일부 명령으로 인해 특정 하드웨어에 문제가 발생한 경우에도 이를 사용했으므로 하드웨어 X에 배포할 때 앱을 구성할 수 있습니다.
다른 옵션:
#If CONFIG = "Release" Then
....
#End If
원하는 이름으로 조건부 컴파일 시간 기호를 만들 수 있습니다.프로젝트 특성 상자의 메뉴 옵션에 있는 "프로젝트 빌드" 대화상자로 이동합니다.프로젝트->[프로젝트 이름] 속성...
또한 "C# 코드 파일의 맨 위에" 정의할 수 있습니다.예:
#define RELEASE
// or
#undef RELEASE
#if 문에서 기호를 사용할 수 있습니다.
#if RELEASE
// code ...
#elif …
// code ...
#endif
// or
#if !RELEASE
// code ...
#endif
M4N의 답변 중 (#if (!DEBUG)합니다. 일 수 를 들어 장가타 당하며프서세를, 다른옵로사여용하다른플다의래있니습수것.
bool isRelease = true;
#if DEBUG
isRelease = false;
#endif
또는 릴리스 모드인지 디버그 모드인지를 참조하는 대신 예상 동작을 정의하고 모드에 따라 설정하는 플래그를 사용하는 것이 좋습니다.
bool sendEmails = true;
#if DEBUG
sendEmails = false;
#endif
플래그를 . 아직 에 이는 프사것다다릅니과는는의 합니다. 플래그는 여전히 운영 중이기 때문에 다음과 같은 오버헤드가 발생합니다.if (sendEmails) {/* send mails */}하지 않는 할 수 를 들어, 에서는 릴스에존디존않코해는호코때당출드다, '▁each▁want▁to▁call▁you▁e▁may부싶당,▁existing▁but수▁code있습당고르▁but,니을을신다은▁your▁nots▁called▁that▁can▁time신;릴▁advantageous▁tests▁rather▁thisSendEmails()추가 출력을 얻기 위해 디버그에서 실행하는 동안 modice_1를 사용합니다.
왜 그냥
#if RELEASE
#undef DEBUG
#endif
언급URL : https://stackoverflow.com/questions/507704/will-if-release-work-like-if-debug-does-in-c
'codememo' 카테고리의 다른 글
| Azure 스토리지 BLOB에 캐시 제어 및 만료 헤더 추가 (0) | 2023.05.23 |
|---|---|
| Bash 스크립트에 전달된 인수 수를 확인하려면 어떻게 해야 합니까? (0) | 2023.05.23 |
| ReportGenerator에서 코드 적용 범위 결과 게시가 작동하지 않음 (0) | 2023.05.23 |
| jQuery를 사용하여 div의 하위 요소를 어떻게 반복합니까? (0) | 2023.05.23 |
| Git diff - 줄의 시작과 끝에서만 공백 무시 (0) | 2023.05.23 |