Есть несколько незначительных мест, в которых код моего проекта может быть значительно улучшен, если целевой платформой была более новая версия. Я хотел бы иметь возможность лучше использовать условную компиляцию в C #, чтобы переключать их по мере необходимости.
Что-то вроде:
#if NET40
using FooXX = Foo40;
#elif NET35
using FooXX = Foo35;
#else NET20
using FooXX = Foo20;
#endif
Любой из этих символов бесплатно? Нужно ли вводить эти символы как часть конфигурации проекта? Кажется, это достаточно просто сделать, так как я буду знать, какая инфраструктура предназначена для MSBuild.
/p:DefineConstants="NET40"
Как люди справляются с этой ситуацией? Вы создаете разные конфигурации? Вы передаете константы через командную строку?
При использовании системы сборки.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