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

时间:2013-03-20 11:22:05

标签: 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 Standard中),我们希望代码可以在任何系统上进行编译而无需更改。

1 个答案:

答案 0 :(得分:2)

创建新的配置

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

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

修改 使用配置,您可以执行此操作,但不会将您从对Microsoft.VisualStudio.Profiler.dll的破坏引用中保存下来。我建议将所有这些代码移到另一个库,然后将它们发送给他们编译。那里你只露出一个方法:

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

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