如何最好地检测.NET中的发布版本和调试版本?

9

我有大约10个与Mvc应用程序一起使用的短CSS文件。

它们像这样:

error.css login.css 等等...

只是一些非常简短的CSS文件,使得更新和编辑变得容易(至少对我而言)。我的目标是优化if-else分支并将其不包含在最终代码中。我想要做的是这样的:

if(Debug.Mode){

<link rel="stylesheet" type="text/css" href="error.css" /> 
<link rel="stylesheet" type="text/css" href="login.css" /> 
<link rel="stylesheet" type="text/css" href="menu.css" /> 
<link rel="stylesheet" type="text/css" href="page.css" /> 
} else {
<link rel="stylesheet" type="text/css" href="site.css" /> 
}

我将有一个msbuild任务,它将组合所有的CSS文件,最小化它们以及所有好的东西。我只需要知道是否有一种方法可以在最终结果中删除if else分支。


在Stackoverflow上有很多类似的问题,其中一个问题是如何在.NET中编程检测发布/调试模式,而且有许多不同的答案: https://dev59.com/LHRB5IYBdhLWcg3wV196 https://dev59.com/c3RA5IYBdhLWcg3w2x6W https://dev59.com/snVC5IYBdhLWcg3wvT_g https://dev59.com/fkXRa4cB1Zd3GeqPoxjd http://stackoverflow.com/questions/890459/asp-net-release-build-vs-debug-build - Kiquenet
请参考我的帖子: 如何判断程序集是Debug还是Release模式 和 https://dev59.com/c3RA5IYBdhLWcg3w2x6W#5316565 - Dave Black
5个回答

27

具体而言,在C#中就像这样:

#if (DEBUG)
   Debug Stuff
#endif

C# 有以下预处理器指令:
#if 
#else 
#elif // Else If
#endif
#define
#undef // Undefine
#warning // Causes the preprocessor to fire warning
#error // Causes the preprocessor to fire a fatal error
#line // Lets the preprocessor know where this source line came from
#region // Codefolding
#endregion 

7
  if (System.Diagnostics.Debugger.IsAttached)
  {
           // Do this
  }
  else
  {
            // Do that
  }

5
这会在运行时告诉您调试器是否已连接,但不会告诉您该程序集是DEBUG构建还是RELEASE构建。 - AlfredBr

6
我应该使用谷歌。
#if DEBUG
    Console.WriteLine("Debug mode.") 
#else 
    Console.WriteLine("Release mode.") 
#endif 

确保在项目属性中选中选项“配置设置” -> “生成”“定义DEBUG常量”。请勾选该选项。

4
你可以尝试使用

标签

HttpContext.Current.IsDebuggingEnabled

这个功能是由配置中的一个节点来控制的。在我看来,这比条件编译更好。

然而,如果您想基于编译来进行控制,我认为您可以使用ConditionalAttribute

祝好!


1

编译器常量。我不记得C#的语法,但这是我在VB中的做法:

#If CONFIG = "Debug" Then
  'do somtehing
#Else
  'do something else
#EndIf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接