仅当我在 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/