条件编译常量在.net核心多目标SDK风格项目中不起作用

时间:2018-10-03 20:42:01

标签: visual-studio .net-core csproj conditional-compilation multitargeting

这是最初定义条件编译常量的方式(注意多目标):

<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

我正在使用我的代码,那时我的程序集还没有编译。


此后,我添加了附加的条件编译常量(不编辑先前的条件编译常量-NETFULLNETCORE):

<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0'">
    <DefineConstants>NETCOREONLY;</DefineConstants>
</PropertyGroup>

总体代码(汇编)仍未编译。

并在不需要时删除了此额外的NETCOREONLY,仅保留了之前的NETCORENETFULL)。

总体代码(汇编)仍未编译。

问题在于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的{​​{1}}恒定工作,但是不能。

1 个答案:

答案 0 :(得分:1)

确保仅附加到B.__init__属性,而不是将其完全重置为新值:

DefineConstants