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

C# 如何仅在分析时定义编译符号?,c#,profiling,c-preprocessor,symbols,conditional-compilation,C#,Profiling,C Preprocessor,Symbols,Conditional Compilation,我只想在VisualStudio中评测C项目时定义一个编译符号,如PROFILE。在正常调试或发布版本中,不应定义它 因此,if和endif之间的代码仅在分析时编译 #if PROFILE DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId); #endif 它应该是编译时检查,而不是运行时检查。原因是我们的一些团队的PC上没有VS 2012标准中未包含的探查器,我们希望代码可以在任何系统上

我只想在VisualStudio中评测C项目时定义一个编译符号,如PROFILE。在正常调试或发布版本中,不应定义它

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

#if PROFILE
  DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId); 
#endif
它应该是编译时检查,而不是运行时检查。原因是我们的一些团队的PC上没有VS 2012标准中未包含的探查器,我们希望代码可以在任何系统上编译而不做任何更改。

创建一个新配置:

单击构建,然后选择配置管理器。 单击活动解决方案配置并选择新建。 在名称中键入Profile,然后选择哪个配置将用作概要文件发布的模板。 使用OK确认,它将为解决方案中的每个项目创建名为Profile的新配置。 打开每个项目的属性,在“生成”选项卡中,在条件编译符号中添加配置文件符号,然后保存属性。 现在,当您构建配置文件配置时,将定义配置文件符号。我建议您也考虑一下,如果您自动生成,您可以通过命令行使用MSBuild属性将配置文件符号排除在解决方案之外。我想您不经常为配置文件而生成

编辑 通过配置,您可以做到这一点,但它不会将您从对Microsoft.VisualStudio.Profiler.dll的中断引用中解救出来。我的建议是将所有这些代码移到另一个库中,然后将它们编译后发送给他们。在这里,您将只公开一个方法:

public static class ProfilingHelpers
{
    [Conditional("PROFILE")]
    public static void StartProfiling()
    {
        DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId);
    }
}
在您的代码中,您将始终调用它,但它将仅在定义概要文件时执行,因此您不需要向每个项目添加新配置,只需向一个DLL添加新配置