如何将预处理器符号与自定义构建配置结合使用?

问题描述 投票:0回答:2

我想创建一个启用发布模式但带有一些日志记录的构建配置。我曾设想它可以与预处理器符号一起使用。例如,如果您说

#if DEBUG
那么它只会在构建处于 DEBUG 状态时编译代码块。我创建了一个名为“ReleaseWithLogging”的自定义构建,但预处理器无法识别它。

是否有可能实现我所要求的目标,如果可以,如何实现?或者更好的是,不使用符号,而是使用 ConditionalAttribute

c# visual-studio-2013 c-preprocessor
2个回答
6
投票

右键单击您的项目并选择属性

在左侧选择Build选项卡选项。

在右侧的条件编译符号字段中输入您的ReleaseWithLogging符号。

实际上,您只需为需要它的配置输入此符号定义。因此,当您选择“发布”作为顶部的配置时,您可以设置符号。当您在配置中选择“调试”时,可以忽略它。

然后在你的代码中...

#if ReleaseWithLogging

...将传递您定义符号的配置。根据您的描述,我假设您只会为新的自定义 ReleaseWithLogging 配置定义它。


0
投票

我遇到了同样的问题并找到了解决方案。 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
...
© www.soinside.com 2019 - 2024. All rights reserved.