Условные цели компиляции и структуры

Есть несколько незначительных мест, в которых код моего проекта может быть значительно улучшен, если целевой платформой была более новая версия. Я хотел бы иметь возможность лучше использовать условную компиляцию в C #, чтобы переключать их по мере необходимости.

Что-то вроде:

#if NET40
using FooXX = Foo40;
#elif NET35
using FooXX = Foo35;
#else NET20
using FooXX = Foo20;
#endif

Любой из этих символов бесплатно? Нужно ли вводить эти символы как часть конфигурации проекта? Кажется, это достаточно просто сделать, так как я буду знать, какая инфраструктура предназначена для MSBuild.

/p:DefineConstants="NET40"

Как люди справляются с этой ситуацией? Вы создаете разные конфигурации? Вы передаете константы через командную строку?

119
задан Peter Mortensen 10 September 2019 в 13:07
поделиться

1 ответ

При использовании системы сборки.NET Core можно использовать ее предопределенные символы (которые на самом деле уже соответствуют примеру и не требуют никаких изменений в Вашем .csproj!):

#if NET40
using FooXX = Foo40;
#elif NET35
using FooXX = Foo35;
#else NET20
using FooXX = Foo20;
#endif

список предопределенных символов документируется в [1 133] Библиотеки Разработки с Кросс-платформенными Инструментами и #if (Ссылка C#) :

Платформа.NET: NETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48

Стандарт.NET: NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0, NETSTANDARD2_1

.NET Core: NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0

0
ответ дан 24 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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