条件编译常量在 .net 核心多目标 sdk 样式项目中不起作用
Conditional compilation constant not working in a .net core multitargeted sdk-style project
条件编译常量最初是这样定义的(注意多目标):
<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
持续工作,但事实并非如此。
确保您仅附加到 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>
条件编译常量最初是这样定义的(注意多目标):
<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
持续工作,但事实并非如此。
确保您仅附加到 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>