我想创建一个启用发布模式但带有一些日志记录的构建配置。我曾设想它可以与预处理器符号一起使用。例如,如果您说
#if DEBUG
那么它只会在构建处于 DEBUG 状态时编译代码块。我创建了一个名为“ReleaseWithLogging”的自定义构建,但预处理器无法识别它。
是否有可能实现我所要求的目标,如果可以,如何实现?或者更好的是,不使用符号,而是使用 ConditionalAttribute
右键单击您的项目并选择属性。
在左侧选择Build选项卡选项。
在右侧的条件编译符号字段中输入您的ReleaseWithLogging符号。
实际上,您只需为需要它的配置输入此符号定义。因此,当您选择“发布”作为顶部的配置时,您可以设置符号。当您在配置中选择“调试”时,可以忽略它。
然后在你的代码中...
#if ReleaseWithLogging
...将传递您定义符号的配置。根据您的描述,我假设您只会为新的自定义 ReleaseWithLogging 配置定义它。
我遇到了同样的问题并找到了解决方案。 Visual Studio IDE 无法配置特定于配置的#defines,但是您可以手动编辑
.csproj
文件来添加它们。
首先,使用 VS GUI 创建新的发布配置,这会将适当的条目添加到您的
.sln
和 .csproj
文件中。
接下来,手动编辑 .csproj 文件以添加要在配置的 PropertyGroup 中使用的 #define 常量。这是使用这个设置的
<DefineConstants>$(DefineConstants);YOURCONSTANTHERE</DefineConstants>
.csproj
文件的示例部分,在调试和新的 DevDebug 配置中都有两个不同的常量:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>9999</WarningLevel>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>$(DefineConstants);NORMALDEBUG</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DevDebug|AnyCPU'">
<WarningLevel>9999</WarningLevel>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>$(DefineConstants);DEVDEBUG</DefineConstants>
</PropertyGroup>
现在在您的 C# 代码中您可以执行以下操作:
#if NORMALDEBUG
...
#if DEVDEBUG
...