2010-05-13 2 views
6

У меня есть куча модульных тестов, которые необходимо условно скомпилировать на основе версии ОС Windows. Эти модульные тесты тестируют TxF, который доступен только в Windows Vista и выше.Есть ли простой способ в C# иметь условные символы компиляции на основе версии ОС

#if WIN_OS_VERSION >= 6.0 
// Run unit tests 
#endif 

ответ

4

Я не думаю, что есть способ условно скомпилировать код на основе версии ОС. Документация для состояний #define (выделение мое):

Символы могут использоваться для указания условий для составления. Вы можете использовать для символа с #if или #elif. Вы также можете использовать условный атрибут для выполнения условной компиляции.

Вы можете определить символ, но вы не можете присвоить значение символу. Директива #define должна быть указана в файле перед использованием любых инструкций , которые также не являются директивами.

Вы также можете определить символ с опцией/define компилятора. Вы можете undefine символ с #undef.

Символ, который вы определяете с помощью/define или с #define, не конфликтует с переменной с тем же именем. То есть имя переменной не должно передаваться в директиву препроцессора, а символ может быть оценен только директивой препроцессора .

Объем символа, созданного с помощью #define, представляет собой файл, в котором он был определен.

Вы должны условно запустить вместо этого:

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

Update:

Это было предложено before.

+0

Спасибо, Джон, это то, о чем я думал, как о работе. –

0

Вы можете просто управлять символами отладки самостоятельно.

только придумайте схему, которую вы можете придерживаться (Документ:), а затем, когда вы компилируете новую платформу, просто не забудьте изменить директивы процессора.

, например, вы могли бы иметь символы

LATER_THAN_XP 
LATER_THAN_VISTA 
etc... 

Затем вы можете использовать #ifdef «S условно компилировать

#ifdef LATER_THAN_XP 

//Run Unit Tests 

#endif 

Тогда вы можете просто определить эти константы в свойствах проекта. Или, если вы чувствуете себя авантюристом, вы, вероятно, можете определить задачу MSBuild, которая экспортирует правильный символ (ы) для определения во время компиляции, но это означает, что уровень выше моего уровня оплаты.

Смежные вопросы