Условная константа компиляции не работает в многоцелевом проекте SDK.
Вот как изначально были определены условные константы компиляции (обратите внимание на многоцелевой таргетинг):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netcoreapp2.0;net461</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0' OR '$(TargetFramework)' == 'netstandard2.0'">
<DefineConstants>NETCORE;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net461'">
<DefineConstants>NETFULL;</DefineConstants>
</PropertyGroup>
...
</Project>
В это время NETCORE
константа работала нормально.
#if NETCORE
// Works Fine! Not gray in VS; Compiler recognizes code!
public string Abc { get; set; }
#endif
Я работал с моим кодом, и моя сборка не компилировалась в то время.
После этого я добавил дополнительную константу условной компиляции (не редактируя предыдущие - NETFULL
а также NETCORE
):
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0'">
<DefineConstants>NETCOREONLY;</DefineConstants>
</PropertyGroup>
Общий код (сборка) все еще не компилируется.
И удалил этот дополнительный NETCOREONLY
как не нужно, оставляя только предыдущие (NETCORE
а также NETFULL
).
Общий код (сборка) все еще не компилируется.
Проблема в том, что NETCORE
перестал работать, как раньше.
Я перехожу на netcoreapp2.0
платформа, но код в
#if NETCORE
// Problem; Stays gray in VS;
// Compiler does not understand that it shoud consume this code
public string Abc { get; set; }
#endif
не виден компилятору. Это остается серым в VS. Как будто это не так netcoreapp2.0
,
Следующая декларация
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0' OR '$(TargetFramework)' == 'netstandard2.0'">
<DefineConstants>NETCORE;</DefineConstants>
</PropertyGroup>
должен сделать NETCORE
постоянная работа для netcoreapp2.0
, но это не так.
1 ответ
Убедитесь, что вы добавляете только DefineConstants
свойство и не сбрасывать его на новое значение полностью:
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.0' OR '$(TargetFramework)' == 'netstandard2.0'">
<DefineConstants>$(DefineConstants);NETCORE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.0'">
<DefineConstants>$(DefineConstants);NETCOREONLY</DefineConstants>
</PropertyGroup>