Предположим, у вас есть приложение с несколькими таргетингами. В вашем .csproj
файле:
<PropertyGroup>
<TargetFrameworks>netcoreapp2.2;netcoreapp3.1</TargetFrameworks>
</PropertyGroup>
Вы можете добавить условное PropertyGroup
спецификацию c к netcoreapp3.1
и задать собственную константу:
<PropertyGroup Condition="'$(TargetFramework)'=='netcoreapp3.1'">
<DefineConstants>ICANHASNULLABLE</DefineConstants>
<Nullable>enable</Nullable>
</PropertyGroup>
Вы можете также определите вашу директиву на основе <Nullable>
:
<PropertyGroup Condition="'$(Nullable)'=='enable'">
<DefineConstants>ICANHASNULLABLE</DefineConstants>
</PropertyGroup>
В своем коде вы можете использовать ICANHASNULLABLE
:
#if ICANHASNULLABLE
void Foo(string? val)
#else
void Foo(string val)
#endif
{
}
Версия языка по умолчанию для netcoreapp 3.x C# 8,0 . Таким образом, любой PropertyGroup
, специально определенный для netcoreapp3.1
в вышеприведенном примере, может рассматриваться как указанный от c до C# 8.0, если LangVersion
не установлен.