我可以判断Visual Studio 2012何时处于调试与生产中?

时间:2014-01-28 21:52:42

标签: c# asp.net-mvc-4 visual-studio-2012

我有一个View,我希望从两个文件中有条件地显示代码:

<% 
if (System.Diagnostics.Debugger.IsAttached) {
    Response.WriteFile("~/path/to/index-A.html");
} else {
    Response.WriteFile("~/path/to/index-B.html");
} 
%>

上面的代码可以工作......但是如果附加调试器,我实际上不太感兴趣。相反,我想知道开发人员是否从Visual Studio 2012“标准”工具栏中的配置管理器下拉列表中选择了“调试”或“生产”。

为什么?我有一个预构建步骤,它根据“ConfigurationName”有条件地编译一些JavaScript和CSS。

我试图使用这样的东西:

if (System.Configuration.ConfigurationManager == "Debug") { //...

...但是这不起作用(由于各种原因)而且我的C#/ ASP.NET知识在这方面缺乏。

帮助?

4 个答案:

答案 0 :(得分:2)

bool isInDebug = false;

#if DEBUG
    isInDebug = true;
#endif

答案 1 :(得分:1)

使用#if directive引用来完成您要找的内容。

#define DEBUG
// ...
#if DEBUG
    Console.WriteLine("Debug version");
#endif

答案 2 :(得分:1)

您可以使用if指令引用来区分生产与调试。

// preprocessor_if.cs
#define DEBUG 
#define MYTEST
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !MYTEST)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
        Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
        Console.WriteLine("DEBUG and MYTEST are defined");
#else
        Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
    }
}

答案 3 :(得分:0)

虽然你给出的所有答案(基本上都是一样的)都是正确的,但我无法在我的视图中发布该逻辑。我看到this answer注释表示尝试将指令添加到控制器,然后设置一些可以在我的View中用作条件检查的ViewData。

    public ActionResult Index()
    {
        string status = "Release";

        #if DEBUG
            status = "Debug";
        #endif

        ViewData["ConfigurationStatus"] = status;

        return View();
    }

在我看来......

<% 
if (ViewData["ConfigurationStatus"] == "Debug") {
    Response.WriteFile("~/path/to/index-A.html");
} else {
    Response.WriteFile("~/path/to/index-B.html");
} 
%>

这就像一个魅力!