条件编译不起作用

rid*_*nsb 5 conditional-compilation visual-studio-2010 razor c#-4.0 asp.net-mvc-3

在stackoverflow上阅读这篇文章想要在编译发布模式时加载不同的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 
}
Run Code Online (Sandbox Code Playgroud)

尝试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  }
Run Code Online (Sandbox Code Playgroud)

我尝试以大写形式进行DEBUG但是在编译Debug to Release时没有任何改变没有效果

its*_*att 7

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

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

bool IsDebug = true;

#if (!DEBUG)
IsDebug = false;
#endif
Run Code Online (Sandbox Code Playgroud)

你的View会做类似的事情:

@if(Model.IsDebug) 
{ 
}
else
{
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用ViewBag/ViewData来保存该布尔值.


更新:

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

创建一个BaseController继承自的新类Controller.

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

      #if DEBUG
      indebug = true;
      #endif

      ViewBag.InDebug = indebug;
   }
}
Run Code Online (Sandbox Code Playgroud)

并让您的控制器继承自此而不是Controller.

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

@if (ViewBag.InDebug)
{
}
else
{
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.