2010-05-13 20 views

Trả lời

4

Tôi không nghĩ rằng có cách để biên dịch mã theo điều kiện dựa trên phiên bản hệ điều hành. Tài liệu cho #define states (nhấn mạnh mỏ):

Ký hiệu có thể được sử dụng để chỉ định điều kiện để biên soạn. Bạn có thể kiểm tra biểu tượng bằng #if hoặC#elif. Bạn cũng có thể sử dụng thuộc tính có điều kiện để thực hiện biên dịch có điều kiện.

Bạn có thể xác định biểu tượng, nhưng bạn không thể chỉ định giá trị cho một biểu tượng. Chỉ thị #define phải xuất hiện trong tệp trước khi bạn sử dụng bất kỳ hướng dẫn nào cũng không phải là chỉ thị.

Bạn cũng có thể xác định biểu tượng bằng tùy chọn/trình biên dịch xác định. Bạn có thể xác định lại một biểu tượng với #undef.

Biểu tượng mà bạn xác định bằng/xác định hoặC#define không xung đột với biến có cùng tên. Tức là, không được chuyển tên biến số sang chỉ thị tiền xử lý và biểu tượng chỉ có thể được đánh giá bằng chỉ thị tiền xử lý .

Phạm vi của biểu tượng được tạo bằng cách sử dụng #define là tệp mà tệp được xác định.

Bạn sẽ phải có điều kiện chạy nó thay vì:

void TestTxF() { 
    if (System.Environment.OSVersion.Version.Major < 6) { 
     // "pass" your test 
    } 
    else { 
     // run it 
    } 
} 

Cập nhật:

này đã được yêu cầu before.

+0

Cảm ơn Jon, đó là những gì tôi đã nghĩ đến khi làm một công việc xung quanh. –

0

Bạn chỉ cần tự mình quản lý các biểu tượng gỡ lỗi.

chỉ cần tìm ra một lược đồ mà bạn có thể dính vào (Tài liệu It!) và sau đó khi bạn biên dịch cho nền tảng mới, hãy nhớ thay đổi chỉ thị của bộ xử lý.

ví dụ bạn có thể có những biểu tượng

LATER_THAN_XP 
LATER_THAN_VISTA 
etc... 

Sau đó, bạn có thể sử dụng #ifdef 's có điều kiện biên dịch

#ifdef LATER_THAN_XP 

//Run Unit Tests 

#endif 

Sau đó, bạn chỉ có thể xác định các hằng số trong tính chất dự án của bạn. Hoặc nếu bạn cảm thấy thích mạo hiểm, bạn có thể xác định một MSBuild Task xuất khẩu (các) ký hiệu chính xác để xác định thời gian biên dịch, nhưng đó là số tiền trên mức lương của tôi.

Các vấn đề liên quan