# İf RELEASE, DEBUG'ın C # ile yaptığı gibi çalışır mı?


277

#İf derleyici yönergesini gördüğüm tüm örneklerde "DEBUG" kullanırlar. Hata ayıklama modunda derlendiğinde çalıştırmak istemediğim kodu dışlamak için aynı şekilde "RELEASE" kullanabilir miyim? Bu blok ile çevrelemek istiyorum kodu bir sürü e-posta gönderir ve test sırasında yanlışlıkla bu göndermek istemiyorum.


3
#if !DEBUGaynı işleve sahiptir #if RELEASE. Alternatif olarak, #if DEBUGo #elsezaman #endifmodlarda çalıştırmak için farklı kod varsa.
Nat

Yanıtlar:


275

Hayır, bir iş yapmazsan olmaz.

Burada önemli olan DEBUG'ın gerçekte ne olduğudur ve derleyicinin kontrol edebileceği bir tür sabittir.

Proje özelliklerini kontrol ederseniz, Oluştur sekmesinin altında üç şey bulacaksınız:

  • "Koşullu derleme sembolleri" etiketli bir metin kutusu
  • "DEBUG sabitini tanımla" etiketli bir onay kutusu
  • "TRACE sabitini tanımla" etiketli bir onay kutusu

Böyle bir onay kutusu ya da RELEASE adlı önceden tanımlanmış sabit / sembol yoktur.

Ancak, bu adı Koşullu derleme sembolleri etiketli metin kutusuna kolayca ekleyebilirsiniz, ancak bu ayarlar yapılandırma başına olduğundan proje yapılandırmasını Yayınlama moduna ayarladığınızdan emin olun.

Yani, metin kutusuna eklemezseniz, #if RELEASEherhangi bir yapılandırma altında kod üretmez.


393

RELEASE tanımlanmadı ancak kullanabilirsiniz

#if (!DEBUG)
  ...
#endif

2
Öyle değil, ama tabii ki NOT operatörünü böyle kullanabilirsiniz. Cevabımı yazarken bunu düşünmedim.
Lasse V. Karlsen

4
Anlaşılıyor, ancak çözümünüzü kullanmak daha net ve "daha doğru" IMHO.
Daniel Schaffer

1
Sadece yayım ve hata ayıklama daha yapılandırmaları olabilir Özelliklede - benim bazı projeler için DEBUG, RELEASE ve DEPLOY veya DEV (DEBUG), TEST ve PROD (RELEASE) bulunmaktadır
Adam Nofsinger

Yukarıdaki yorumlarla karıştırılan herkes için, düzenlenmemiş cevap RELEASEtanımlanıp tanımlanmadığını merak etti .
Dan

41

Hayır!

Hata ayıklama yapılandırmasında DEBUGtanımlanmış bir sabit (Visual Studio tarafından otomatik olarak tanımlanır) varken, serbest bırakma modu için bu tür bir sabit tanımlanmaz. Derleme altındaki proje ayarlarınızı kontrol edin.

Project -> Build altında [DEBUG sabitini tanımla] seçeneğini seçmek her dosyanın başına #define DEBUG eklemek gibidir.

Sürüm yapılandırması için bir RELEASE sabiti tanımlamak istiyorsanız şu adrese gidin:

  • Proje Özellikleri -> Derleme
  • Serbest Bırakma Modunu Seçin
  • içinde Koşullu derleme sembolleri girmek metin kutusu: RELEASE

1
Sürüm yapılandırmam için bir RELEASE sabiti ve Test yapılandırmam için bir TEST sabiti tanımladığım için bunu çok yararlı buldum. #if (RELEASE) [RequireHttps] #endif
Tanımlamak

27

VS kurulumumda (VS 2008) #if RELEASEçalışmıyor. Ancak sadece#if !DEBUG

Misal:

#if !DEBUG
SendTediousEmail()
#endif

10

Bunu daha önce hiç görmedim ... ama gördüm:

#if (DEBUG == FALSE)

ve

#if (!DEBUG)

Senin için bu iş mi?


Önişlemci sembollerinde C # değerleri yoktur; bunlar sadece "tanımlanmış" veya "tanımlanmamıştır". Böylece !ikinci örneğinizde olduğu gibi sadece operatör çalışacaktır.
Jonathon Reinhart

1
MSDN göre, yapabilirsiniz doğru veya yanlış için teste == gibi kullanabilirsiniz. msdn.microsoft.com/en-us/library/4y6tbswk.aspx
jason_ruz

8

#if(!DEBUG)Bu amaçlar için kullanabilirsiniz .


Benim için iyi bir tasarruf bu xamrian kullanmak istiyorum gönderi için teşekkürler.
rogue39nin

4

"Pop Catalin" doğru anladı. Tanımı derleme türüne göre kontrol etmek büyük esneklik sağlar. Örneğin, hepsi aynı çözümde bir "DEBUG", "DEMO" ve "RELEASE" yapılandırmasına sahip olabilirsiniz. Bu, iki farklı çözümle yinelenen programlama ihtiyacını önler.

Yani evet #if RELEASEya #if (RELEASE)da aynı şekilde çalışıyor#if DEBUG RELEASE Koşullu derleme sembolünün tanımlandığı zamanki .

Aşağıdakiler "Pop Catalin" gönderisinden alınır: Sürüm yapılandırması için bir RELEASE sabiti tanımlamak istiyorsanız şu adrese gidin: * Proje Özellikleri -> Derleme * Koşullu derleme sembolleri metin kutusuna Sürüm Modunu Seç * girin: RELEASE


2

Bunun eski bir soru olduğunu biliyorum, ancak TEST veya UAT gibi DEBUG ve RELEASE dışında kendi yapılandırmalarınızı oluşturabileceğinizden bahsetmeye değer olabilir.

Daha sonra proje özellikleri sayfasının Derleme sekmesinde "Koşullu derleme sembolleri" ni TEST (örneğin) olarak ayarladıysanız,

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

Bu yapıyı, ihtiyacınız varsa farklı istemciler veya hatta tüm Web Yöntemleri gibi belirli bir nedenden dolayı kullanabilirsiniz. Bunu geçmişte bazı komutların belirli donanımlarda sorunlara neden olduğu yerlerde de kullandık, bu nedenle X donanımına dağıtıldığında bir uygulama için bir yapılandırmamız var.


0

Kendi koşullu derleme zamanı sembollerinizi (istediğiniz herhangi bir ad) oluşturabilirsiniz. Proje özellikleri kutusunda, menü seçeneğinde bulunan "proje Derlemesi iletişim kutusu" na gidin: Proje -> [proje adı] Özellikler ...

Bunları "C # kod dosyasının üstünde" de tanımlayabilirsiniz. Sevmek:

#define RELEASE
// or
#undef RELEASE

#if ifadesinde sembolü kullanabilirsiniz:

#if RELEASE
// code ...
#elif 
// code ...
#endif

// or

#if !RELEASE
// code ...
#endif

-8

neden sadece

#if RELEASE
#undef DEBUG
#endif

3
Sürüm modu altında Visual Studio tarafından tanımlanan RELEASE adlı sabit yok.
Pop Catalin

1
/d:RELEASEde işe yarar. Bunu Sürüm yapılandırması (proje özellikleri oluşturma sekmesi) altındaki koşullu derleme sembollerine de ekleyebilirsiniz.
SliverNinja - MSFT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.