В "Свойствах" моего проекта у меня есть следующее:
![enter image description here]()
Я хочу проверить, существует ли символ TEST
, и только потом делать некоторые вещи.
Поэтому я сделал то, что вы видите на картинке ниже, и в классе, в котором он работает. Однако это не работает в представлениях.
![enter image description here]()
Текст в этом блоке серый, даже если TEST
определен!
Как я могу заставить его работать, если TEST
определен?
Ответ 1
Проблема связана с тем, что представления компилируются только при запуске приложения, поэтому указанный TEST
символ больше не применяется компилятором, потому что он не знает об этом.
Предполагая, что вы используете С#, вам нужно настроить компилятор для использования символа TEST
при создании представлений, и для этого вам нужно переопределить его конфигурацию в Web.config
, используя следующее:
<system.codedom>
<compilers>
<compiler
language="c#;cs;csharp"
extension=".cs"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
compilerOptions="/define:TEST"
warningLevel="1" />
</compilers>
</system.codedom>
Важная часть состоит в том, что вы определяете compilerOptions="/define:TEST"
. В остальной части конфигурации вам необходимо адаптироваться к вашим конкретным потребностям, например, переключиться между .NET 2.0 или .NET 4.0.
Если вы примените его непосредственно в Web.config
, он будет работать, но будет определять TEST
каждый раз. Так что вы действительно должны использовать преобразования Web.config, чтобы символ использовался только для правильных конфигураций сборки.
Ответ 2
Вместо того, чтобы указывать флаг компилятора в web.config в соответствии с принятым ответом (который также требует указания версии компилятора в web.config, который является нестандартным местоположением), я пошел со следующим:
Добавить метод в базовый класс, совместно используемый моими моделями
public bool IsDebugBuild
{
get
{
#if DEBUG
return true;
#else
return false;
#endif
}
}
Используйте этот метод в моих представлениях
if (mm.IsDebugBuild) {
<div class="debug">
// Do Stuff
</div>
}
Ответ 3
Установленный вами символ используется только во время компиляции. В противном случае этого не существует. Таким образом, у вашего веб-проекта DLL нет этого символа вообще. Поэтому, когда View компилируется. символ не существует, и он не будет работать так, как вы ожидаете.
Ответ 4
Я не думаю, что его можно использовать условные символы в представлении, как уже сказал Эндрю Барбер.
Но вы можете использовать условные символы в модели:
public class ViewModel
{
//...whatever else you need to define
private bool test;
public bool Test
{
get
{
return test;
}
}
public ViewModel()
{
#if (TEST)
test = true;
#endif
}
}
И затем проверьте значение в представлении:
@{
if (Model.Test)
{
<p>debug statements here</p>
}
}