c# - 如何仅在分析时定义编译符号?

标签 c# profiling c-preprocessor symbols conditional-compilation

仅当我在 Visual Studio 中分析 C# 项目时,我才想定义类似 PROFILE 的编译符号。在正常的调试或发布版本中不应定义它。

因此 #if 和 #endif 之间的代码仅在分析时才会被编译。

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

应该是编译时检查,而不是运行时检查。原因是我们的一些团队在他们的 PC 上没有分析器(未包含在 VS 2012 标准中),并且我们希望代码无需更改即可在任何系统上编译。

最佳答案

创建新的配置:

  • 点击构建,然后选择配置管理器
  • 点击事件解决方案配置并选择新建
  • 名称中输入配置文件,然后选择将用作模板的配置(我猜是发布用于分析)。
  • 点击确定确认,它将为解决方案中的每个项目创建名为Profile的新配置。
  • 打开每个项目的属性,然后在“构建”选项卡中的条件编译符号中添加PROFILE符号,然后保存属性。

现在,当您构建Profile配置时,PROFILE符号将被定义。我建议你看看this post另外,如果您自动化构建,则可以通过命令行使用 MSBuild 属性将您的 PROFILE 符号保留在解决方案之外(我想您不会经常构建分析) .

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

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

在你的代码中,你总是会调用它,但只有在定义了 PROFILE 时才会执行它(因此你不需要向每个项目添加新配置,而只需要向一个 DLL 添加新配置) )。

关于c# - 如何仅在分析时定义编译符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522124/

相关文章:

c++ - 请问支持 MingW32 的免费分析器好吗?

c - GCC - 打印结构的定义

c# - Bot 服务器在尝试连接到 Azure SQL 时返回 HTTP 5xx

c# - 在 WCF Azure 服务总线中动态分配 json 响应内容类型

c# - 编写C#PowerShell cmdlet-如何将调试日志记录输出到TeamCity调用者

php - 同时使用 Xdebug 和 Zend Debugger?

使用任务控制进行 Java 分析 - 我在哪里可以看到我自己的方法所花费的时间?

c# - 如何实现推送通知firebase xamarin.ios C#

c - 恢复定义和宏

C 预处理器文字结构