Условная константа компиляции не работает в многоцелевом проекте SDK. - PullRequest
0 голосов
/ 03 октября 2018

Вот как изначально были определены условные константы компиляции (обратите внимание на многоцелевой таргетинг):

<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 Ответ

0 голосов
/ 07 октября 2018

Убедитесь, что вы только добавляете к свойству 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...