Условная секция csproj в C#
В MSBuild атрибут Condition включает свойство или элемент только когда
выражение истинно. Так для Debug и Release задают разные константы
или ссылки.
Символ DEBUG из DefineConstants попадает в директивы #if
в исходниках той же конфигурации.
Пример разных констант по конфигурации:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
</Project>
В коде ветка под символ DEBUG:
#if DEBUG
Console.WriteLine(1);
#else
Console.WriteLine(0);
#endif
При сборке Debug символ объявлен, при Release без символа ветка пуста. Условие в csproj и ветка #if должны относиться к одной и той же конфигурации.
Для сборки Release выведите в консоль "ship", для любой другой сборки выведите "dev".