Я пишу свою первую страницу бритвы сегодня, не могу понять, как войти #if debug #else #endif
Как я могу ввести препроцессор в бритву?
Я пишу свою первую страницу бритвы сегодня, не могу понять, как войти #if debug #else #endif
Как я могу ввести препроцессор в бритву?
#if debug
сказать, что ты хочешь бритву, но это всегда будет правдой. Таким образом, ответ на ваш вопрос заключается в том, что делать это бессмысленно, поскольку Razor всегда будет компилироваться в режиме отладки.Ответы:
Я только что создал метод расширения:
Затем использовал это в моих взглядах так:
Поскольку помощник скомпилирован с символом DEBUG / RELEASE, он работает.
источник
public static bool IsDebug(...){ return true; }
, и наоборот для режима без отладки.Это встроено в
HttpContext
:ИМО, это имеет больше смысла, чем условная компиляция для представлений и пригодится для некоторых сценариев тестирования. (См . Комментарий Тони Уолла ниже.)
Примечание стороны:
NullReferenceException
дляHttpContext.Current
Алекс Ангас упомянул, что они получили
NullReferenceException
это решение, и несколько человек проголосовали, указав, что это не может быть единичным событием.Мое лучшее предположение:
HttpContext.Current
хранится в томCallContext
смысле, что он доступен только потоку, который обрабатывает входящий HTTP-запрос. Если ваши представления отображаются в другом потоке (возможно, некоторые решения для предварительно скомпилированных представлений?), Вы получитеnull
значение дляHttpContext.Current
.Если вы получили эту ошибку, пожалуйста, дайте мне знать в комментариях и укажите, используете ли вы предварительно скомпилированные представления или что-то особенное, что может привести к частичной визуализации / выполнению ваших представлений в другом потоке!
источник
System.Web
версия 4.0.0.0), и даже с удаленнымdebug
атрибутом (или, действительно, целымcompilation
элементом) я не получаю исключения. Мой следующий лучшая гипотеза состоит в том, что это ошибка, которая была исправлена в более поздних версияхSystem.Web
сборки, или что в вашей конкретной ситуации есть что-то другое, о чем я не знаю. Не могли бы вы создать минимальный тестовый проект и загрузить его куда-нибудь?C # и ASP.NET MVC: использование директивы #if в представлении
На самом деле этот ответ имеет правильный ответ. Вам нужно будет передать, находитесь ли вы в режиме отладки через модель. (или ViewBag), поскольку все представления компилируются в режиме отладки.
источник
// your debug stuff
Я знаю, что это не прямой ответ на вопрос, но, поскольку я почти уверен, что конфигурация отладки является следствием того факта, что вы на самом деле выполняете локально, вы всегда можете использовать это
Request.IsLocal
свойство как отладочный тест. Таким образом:источник
Мое решение очень глупо, но оно работает. Определите глобальную константу где-нибудь в статическом файле:
Затем используйте его с Razor в HTML:
источник
По умолчанию представления MVC не компилируются, поэтому #IF DEBUG не может работать в представлении. Если вы хотите скомпилировать представление для доступа к конфигурации IF DEBUG, вам необходимо:
изменить следующий атрибут с false на true
перезагрузите ваш проект, и тогда представления будут скомпилированы.
Единственный другой обходной путь будет иметь функцию в вашем коде позади
а затем вызвать его из вида:
источник
Для меня код ниже работал очень хорошо.
Когда приложение отлаживается, у меня появляются кнопки, а при отпускании - нет.
источник
Это работает для меня в проекте white label .net core 3.0
источник
В .NET Core вы можете сделать следующее вместо проверки переменных препроцессора:
источник