Условная компиляция не работает - PullRequest
5 голосов
/ 17 августа 2011

Чтение это сообщение здесь, в 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 
}

Попытка 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 для выпуска

1 Ответ

7 голосов
/ 17 августа 2011

Согласно этой публикации SO , если вы хотите, чтобы подобные вещи работали, вы можете использовать свойство в вашей модели для управления условными вещами представления, так что C # устанавливает логическое значение модели (* 1003)* или что-либо еще) через директиву времени компиляции, и 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;
   }
}

, и ваши контроллеры наследуют от него, а не от контроллера.

Тогда в вашем _Layout.cshtml вы могли бы сделать это:

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

Кажется, это работает нормально.

...