.NET Core中DEBUG等标准编译常量的隐式定义规则咨询
.NET Core 标准编译常量定义规则
隐式定义规则(SDK风格项目默认行为)
现在主流的.NET Core/.NET 5+ 项目均采用SDK风格的项目文件(根节点带有Sdk="Microsoft.NET.Sdk"属性),DEBUG、TRACE这类标准编译常量默认由SDK隐式定义,无需手动在项目文件中显式声明:
- 采用
Debug配置构建时,SDK会自动定义DEBUG、TRACE两个常量,默认关闭代码优化 - 采用
Release配置构建时,SDK会自动定义TRACE常量,不会定义DEBUG,默认开启代码优化
验证DEBUG常量是否生效的方法
如果需要确认当前项目配置的常量定义情况,可以用两种方法快速验证:
- 代码编译提示验证
在需要用到条件编译的位置添加如下代码,构建项目后在警告列表即可直接看到结果:
#if DEBUG #warning DEBUG 常量已定义 #else #warning DEBUG 常量未定义 #endif
- 显式覆盖默认规则
如果不想依赖SDK的隐式逻辑,避免不同环境配置差异导致的问题,可以手动在项目文件中添加配置节点,强制指定常量定义规则:
<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <DefineConstants>DEBUG;TRACE;$(DefineConstants)</DefineConstants> </PropertyGroup>
添加上述配置后,Debug配置下DEBUG常量一定会被定义,不受SDK默认行为影响。
内容的提问来源于stack exchange,提问作者Simon Elms
相关产品推荐
相关产品推荐

