1

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

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

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

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

4

1 回答 1

2

创建一个新配置

  • 单击构建,然后选择配置管理器
  • 单击活动解决方案配置并选择新建
  • 输入名称Profile_并选择将用作模板的配置(我猜是用于分析Release
  • OK 确认它将Profile为您的解决方案中的每个项目创建命名的新配置。
  • 打开每个项目的属性,并在 Build 选项卡PROFILE中的Conditional compilation symbols中添加符号然后保存属性。

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

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

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

在您的代码中,您将始终调用它,但它只会在PROFILE定义时执行(因此您不需要向每个项目添加新配置,而只需添加到一个 DLL)。

于 2013-03-20T11:39:37.167 回答