42

我知道我可以通过执行以下操作使用预处理器指令来检查 Debug/Release:

#if DEBUG
    //debug mode
#elif
    //release mode
#endif

但是如何检查其他配置,例如测试。在 VB 中,您可以这样做:

#If CONFIG = "Release" Then
    'Release mode
#ElseIf CONFIG = "Test" Then
    'Test mode
#ElseIf CONFIG = "Debug" Then
    'Debug mode
#End If

所以,我的问题是在 C# 中,如何检查测试模式?如果我在调试和测试中,但不是在发布模式下,我有一些想要执行的代码,所以具体来说,我需要一种方法来检查是否不在发布模式下。在VB中我会这样做:

#If Not CONFIG = "Release" Then
    'Do something here for every configuration that is not Release
#End If
4

4 回答 4

74

它与 DEBUG 相同,假设您已经定义了TEST在“条件编译符号”文本框中列出的构建配置(在项目属性 > 构建选项卡下;这是一个以空格分隔的列表)。

对于您只想在 TEST 构建配置中运行的代码:

#if TEST
// ...
#endif

对于您不想在 TEST 构建配置中运行的代码,您可以#else执行上述操作,也可以执行以下操作:

#if !TEST
// ...
#endif
于 2012-12-21T13:23:45.280 回答
12

右键单击要使用自定义预编译器指令的项目 [项目名称] 名称。

转到属性项,然后转到构建选项卡。

那么您需要在文本框中添加您的自定义指令。例如,我添加了“本地”作为我的自定义指令,见下图

在此处输入图像描述

现在您可以使用新的编译器指令,如下所示(在 C# 中)

  #if **Local**
    //TODO:Add your c# code here
  #endif
于 2015-03-25T01:37:12.500 回答
4

有几种方法可以处理您的保理。在我的世界里,我们使用了四种主要技术:

  1. 编译器标志 ( #if)
  2. 部分类
  3. 单独的实现
  4. 运行时决策

例如,我们为具有非托管代码的 C#、具有所有托管代码的 C#、针对 silverlight 的 C# 构建配置。在 C# 非托管项目中,我们有一个编译时符号UNMANAGED,对于 C#,我们有MANAGED,对于 silverlight,我们有SILVERLIGHT。这让我可以将小任务注入代码并在所有项目中共享相同的文件。没什么大不了。

对于部分类,我们为每个具有边缘代码实现的项目提供单独的 .cs 文件。这被用于我们无法通过将抽象类作为父类来完成这项工作的情况,该类具有大部分实现,然后是每个目标的具体类中的边缘代码。这工作得很好。

对于单独的实现,我们承认代码库之间几乎没有什么可以共享的,我们最好使用单独的代码。这并不理想,但就这样吧。

对于运行时检查,就是这样。不是DEBUG在 a中检查#if,而是使用运行时检查设置来做出选择。除非你有非常巨大的调试脚手架,否则这不是一个糟糕的选择,因为它还可以让你进行现场调试(但你可能有阻止它的交付限制)。

就个人而言,我尽量避免编译器标志。它们使代码更难阅读。不过,老实说,有时它们是有意义的。我们有一些类,因为类声明(我认为 ObservableCollection 不可用)而无法在 silverlight 中编译,我们必须从其他东西继承。其他一切都很好。

于 2012-12-21T13:45:07.077 回答
2

简单的答案是

  • 转到项目-> [项目名称] 属性-> 构建
  • 设置选中 [] 定义 DEBUG

现在您可以使用 DEBUG 前置指令,例如

#if DEBUG
...
#else
...
#endif
于 2014-03-30T09:13:26.507 回答