如何仅在分析时定义编译符号

本文关键字:定义 编译 符号 何仅 | 更新日期: 2023-09-27 18:04:56

我想定义一个编译符号像PROFILE只有当我分析一个c#项目在Visual Studio。在正常的调试或发布版本中,不应该定义它。

因此,#if和#endif之间的代码只在分析时编译。

#if PROFILE
  DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId); 
#endif

应该是编译时检查,而不是运行时检查。原因是我们的一些团队在他们的pc上没有分析器(不包括在VS 2012标准中),我们希望代码可以在任何系统上编译而不需要修改。

如何仅在分析时定义编译符号

创建新的配置:

  • 点击Build,选择Configuration Manager
  • 单击活动解决方案配置,选择新建
  • 名称中键入Profile,并选择将使用哪个配置作为模板(用于分析我猜Release)。
  • 确认OK,它将为您的解决方案中的每个项目创建名为Profile的新配置。
  • 打开每个项目的属性,在Build选项卡条件编译符号中添加PROFILE符号,然后保存属性。

现在,当您构建Profile配置时,将定义PROFILE符号。我建议你也看看这篇文章,如果你自动化构建,你可以通过命令行使用MSBuild属性将PROFILE符号排除在解决方案之外(我想你不经常为分析构建)。

编辑使用配置您可以做到这一点,但它不会使您免于对Microsoft.VisualStudio.Profiler.dll的破坏引用)。我的建议是将所有这些代码移动到另一个库,您将交付给他们编译。在这里,您将只公开一个方法:

public static class ProfilingHelpers
{
    [Conditional("PROFILE")]
    public static void StartProfiling()
    {
        DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId);
    }
}

在你的代码中,你总是调用它,但它只会在PROFILE被定义时执行(所以你不需要为每个项目添加一个新的配置,但只对一个DLL)。