You should note that Directory.Build.props
file is imported at the begin of the csproj file. In your side, because the imported property is too early to be overridden, it is overridden by defineConstants
in CSProj.
So Directory.Build.props
is usually used to define global properties while Directory.Build.targets
is to overwrite the properties.
Check this link.
So you should use to overwrite the property.
Solutions
I have two solutions for you:
1) rename your Directory.Build.props
to Directory.Build.targets
and ensure these on the file:
<Project>
<PropertyGroup>
<DefineConstants>$(DefineConstants)TEST1</DefineConstants>
</PropertyGroup>
</Project>
Make sure that csproj file like this:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>binDebug</OutputPath>
<DefineConstants>DEBUG;TRACE;TEST2;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
2) remain the file as Directory.Build.props
and keep its content as:
<Project>
<PropertyGroup>
<DefineConstants>TEST1</DefineConstants>
</PropertyGroup>
</Project>
change your csproj file to:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>binDebug</OutputPath>
<DefineConstants>DEBUG;TRACE;TEST2;$(DefineConstants)</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…