这是最初定义条件编译常量的方式(注意多目标):
<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
的{{1}}恒定工作,但是不能。
答案 0 :(得分:1)
确保仅附加到B.__init__
属性,而不是将其完全重置为新值:
DefineConstants