#If LIÊN QUAN sẽ hoạt động như #if DEBUG không trong C #?


277

Trong tất cả các ví dụ tôi đã thấy về chỉ thị trình biên dịch #if, họ sử dụng "DEBUG". Tôi có thể sử dụng "ĐÁNG TIN CẬY" theo cùng một cách để loại trừ mã mà tôi không muốn chạy khi được biên dịch ở chế độ gỡ lỗi không? Mã tôi muốn bao quanh với khối này sẽ gửi một loạt email và tôi không muốn vô tình gửi chúng khi kiểm tra.


3
#if !DEBUGphục vụ các chức năng tương tự như #if RELEASEđã có. Ngoài ra, #if DEBUGsau #elseđó #endifnếu có mã khác nhau để chạy trong các chế độ.
Nat

Câu trả lời:


275

Không, nó sẽ không, trừ khi bạn làm một số công việc.

Phần quan trọng ở đây là DEBUG thực sự là gì và đó là một loại hằng số được xác định mà trình biên dịch có thể kiểm tra lại.

Nếu bạn kiểm tra các thuộc tính của dự án, trong tab Build, bạn sẽ tìm thấy ba điều:

  • Một hộp văn bản có nhãn "Biểu tượng biên dịch có điều kiện"
  • Một hộp kiểm có nhãn "Xác định hằng số DEBUG"
  • Một hộp kiểm có nhãn "Xác định hằng số TRACE"

Không có hộp kiểm nào như vậy, cũng không phải là hằng số / ký hiệu được xác định trước có tên ĐÁNG TIN CẬY.

Tuy nhiên, bạn có thể dễ dàng thêm tên đó vào hộp văn bản có nhãn Biểu tượng biên dịch có điều kiện, nhưng hãy đảm bảo bạn đặt cấu hình dự án thành Chế độ phát hành trước khi thực hiện, vì các cài đặt này là trên mỗi cấu hình.

Vì vậy, về cơ bản, trừ khi bạn thêm nó vào hộp văn bản, #if RELEASEsẽ không tạo ra bất kỳ mã nào dưới bất kỳ cấu hình nào.


391

RELEASE không được xác định, nhưng bạn có thể sử dụng

#if (!DEBUG)
  ...
#endif

2
Không, nhưng tất nhiên bạn có thể sử dụng toán tử KHÔNG như thế. Tôi đã không nghĩ về điều đó khi tôi viết câu trả lời của mình.
Lasse V. Karlsen

4
Nó có, nhưng sử dụng giải pháp của bạn rõ ràng hơn và "chính xác hơn", IMHO.
Daniel Schaffer

1
Đặc biệt là vì bạn có thể có nhiều cấu hình hơn chỉ là
ĐÁNG TIN CẬY

Đối với bất kỳ ai khác bối rối bởi các ý kiến ​​trên, câu trả lời chưa được chỉnh sửa tự hỏi nếu RELEASEđược xác định.
Dân

41

Không.

Trong khi trong cấu hình gỡ lỗi, có một DEBUGhằng số được xác định (được xác định tự động bởi Visual Studio) trong khi không có hằng số như vậy được xác định cho chế độ phát hành. Kiểm tra cài đặt dự án của bạn đang được xây dựng.

Chọn [Xác định hằng số DEBUG] trong Project -> Build giống như bao gồm #define DEBUG ở đầu mỗi tệp.

Nếu bạn muốn xác định hằng số ĐÁNG TIN CẬY cho cấu hình phát hành, hãy đi tới:

  • Thuộc tính dự án -> Xây dựng
  • Chọn Chế độ phát hành
  • trong hộp văn bản biểu tượng biên dịch có điều kiện, nhập: LIÊN QUAN

1
Tìm thấy điều này rất hữu ích vì hiện tại tôi đã xác định hằng số ĐÁNG TIN CẬY cho cấu hình Phát hành của tôi và hằng số KIỂM TRA cho cấu hình Thử nghiệm của tôi. Rất hữu ích để xác định yêu cầu https chỉ để phát hành#if (RELEASE) [RequireHttps] #endif
tekiegirl

26

Trên cài đặt VS của tôi (VS 2008) #if RELEASEkhông hoạt động. Tuy nhiên, bạn chỉ có thể sử dụng#if !DEBUG

Thí dụ:

#if !DEBUG
SendTediousEmail()
#endif

10

Tôi chưa bao giờ thấy điều đó trước đây ... nhưng tôi đã thấy:

#if (DEBUG == FALSE)

#if (!DEBUG)

Đó là công việc cho bạn?


Các ký hiệu tiền xử lý không có giá trị trong C #; chúng chỉ là "được xác định" hoặc "không được xác định". Vì vậy, chỉ có !toán tử sẽ làm việc, như trong ví dụ thứ hai của bạn.
Jonathon Reinhart

1
Theo MSDN, bạn có thể sử dụng các toán tử như == để kiểm tra đúng hay sai. msdn.microsoft.com/en-us/l
Library / 4y6tbswk.aspx

8

Bạn có thể sử dụng #if(!DEBUG)cho mục đích này.


Tiết kiệm tốt cho tôi đã muốn sử dụng điều này trong xamrian cảm ơn vì đã đăng.
rogue39nin

4

"Pop Catalin" đã hiểu đúng. Kiểm soát định nghĩa dựa trên loại xây dựng cung cấp rất nhiều tính linh hoạt. Ví dụ: bạn có thể có cấu hình "DEBUG", "DEMO" và "ĐÁNG TIN CẬY" trong cùng một giải pháp. Điều đó ngăn cản sự cần thiết phải lập trình trùng lặp với hai giải pháp khác nhau.

Vì vậy, có #if RELEASEhoặc #if (RELEASE)hoạt động tương tự như #if DEBUGkhi biểu tượng biên dịch có điều kiện ĐÁNG TIN CẬY được xác định.

Phần sau đây được lấy từ bài đăng "Pop Catalin": Nếu bạn muốn xác định hằng số ĐÁNG TIN CẬY cho cấu hình phát hành, hãy đi tới: * Thuộc tính dự án -> Xây dựng * Chọn Chế độ phát hành * trong hộp văn bản Biểu tượng biên dịch có điều kiện, nhập: LIÊN QUAN


2

Tôi biết đây là một câu hỏi cũ, nhưng có thể đáng nói là bạn có thể tạo cấu hình của riêng mình bên ngoài DEBUG và ĐÁNG TIN CẬY, chẳng hạn như KIỂM TRA hoặc UAT.

Nếu sau đó trên tab Build của trang thuộc tính dự án, thì bạn đặt "Biểu tượng biên dịch có điều kiện" thành TEST (ví dụ), sau đó bạn có thể sử dụng một cấu trúc như

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

Bạn có thể sử dụng cấu trúc này cho lý do cụ thể, chẳng hạn như các máy khách khác nhau nếu bạn có nhu cầu hoặc thậm chí toàn bộ Phương thức Web chẳng hạn. Chúng tôi cũng đã sử dụng điều này trong quá khứ nơi một số lệnh đã gây ra sự cố trên phần cứng cụ thể, vì vậy chúng tôi có cấu hình cho một ứng dụng khi được triển khai cho phần cứng X.


0

Bạn có thể tạo cho riêng mình các ký hiệu thời gian biên dịch có điều kiện (bất kỳ tên nào bạn thích). Chuyển đến "hộp thoại Xây dựng dự án", nằm trong hộp thuộc tính dự án, tùy chọn menu: Dự án -> [tên dự án] Thuộc tính ...

Bạn cũng có thể định nghĩa chúng "ở đầu tệp mã C #". Giống:

#define RELEASE
// or
#undef RELEASE

bạn có thể sử dụng biểu tượng trong câu lệnh #if:

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

// or

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

-8

tại sao không chỉ

#if RELEASE
#undef DEBUG
#endif

3
Không có hằng số có tên là ĐÁNG TIN CẬY được xác định bởi Visual Studio trong chế độ phát hành.
Pop Catalin

1
/d:RELEASEcũng sẽ làm việc Bạn cũng có thể thêm phần này vào các biểu tượng biên dịch có điều kiện trong Cấu hình phát hành (tab xây dựng thuộc tính dự án).
SliverNinja - MSFT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.