条件编译不起作用

时间:2011-08-17 14:36:17

标签: visual-studio-2010 asp.net-mvc-3 c#-4.0 razor conditional-compilation

在stackoverflow上读取this post想要在编译发布模式时加载不同的css。

代码:

@{ #if (Debug) 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
#else
<link href="@Url.Content("~/Content/Site-min.css")" rel="stylesheet" type="text/css" />
#endif 
}

尝试2

@{ #if (Debug) }
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
@{ #else }
<link href="@Url.Content("~/Content/Site-min.css")" rel="stylesheet" type="text/css" />
@{ #endif  }

我尝试以大写形式进行DEBUG 但是在编译Debug to Release

时没有任何改变没有效果

1 个答案:

答案 0 :(得分:7)

根据this SO post,如果你想要这种东西工作,你可以使用模型中的属性来驱动View的条件内容,所以C#设置模型的布尔值(IsDebug,或者其他)通过编译时指令的东西,View依赖于它。

所以你的模型会结束这样的事情:

bool IsDebug = true;

#if (!DEBUG)
IsDebug = false;
#endif

并且您的View会执行以下操作:

@if(Model.IsDebug) 
{ 
}
else
{
}

我猜你也可以使用ViewBag / ViewData来保存那个布尔值。


更新:

根据您的评论,这是可以做的事情:

创建一个继承自BaseController

的新Controller
public abstract class BaseController : Controller
{
   ...
   protected BaseController()
   {
      bool indebug = false;

      #if DEBUG
      indebug = true;
      #endif

      ViewBag.InDebug = indebug;
   }
}

让控制器继承此而不是Controller。

然后在你的_Layout.cshtml中你可以这样做:

@if (ViewBag.InDebug)
{
}
else
{
}

这似乎工作正常。