Условная компиляция в зависимости от версии компилятора

Я ищу способ реализовать что-то вроде этого:

#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
    foo?.Bar();
#else
    if (foo != null)
    {
        foo.Bar();
    }
#endif

Конечно, я мог бы сам определить условный символ компиляции, но он не подходит.

Есть ли встроенная константа?
Вопросы, которые я нашел, довольно старые. Может быть, все изменилось к лучшему?

Ответ 1

Нет, из того, что я знаю, они ничего не изменили:-)

Возможно, вы можете сделать небольшую магию внутри csproj для определения констант... но это сложно...

Нет свойства, которое напрямую указывает версию CSC... Существует свойство ($(LangVersion)), которое указывает версию требуемого языкового стандарта... но обычно она устанавливается в default, поэтому "максимальный компилятор поддерживает"...

Или вы можете посмотреть путь к компилятору CSC... Он хранится в CscToolPath или, если он пуст, в MsBuildToolsPath. Оттуда, возможно, вы сможете различить версию CSC.