Есть ли простой способ в C#, чтобы иметь символы условной компиляции на основе версии ОС

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

#if WIN_OS_VERSION >= 6.0
// Run unit tests
#endif
6
задан John Simons 13 May 2010 в 23:27
поделиться

2 ответа

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

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

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

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

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

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

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

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

Обновление:

Об этом уже спрашивали раньше.

4
ответ дан 17 December 2019 в 07:01
поделиться

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

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

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

LATER_THAN_XP
LATER_THAN_VISTA
etc...

Затем вы можете использовать #ifdef для условной компиляции

#ifdef LATER_THAN_XP

//Run Unit Tests

#endif

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

0
ответ дан 17 December 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: