Enable razor runtime compilation что это

Обновлено: 02.07.2024

Больше всего Razor Pages подходят для создания небольших приложений.

Razor Pages в ASP.NET Core

После создания проект будет иметь следующую структуру:

Проект Razor Pages в ASP.NET Core

По умолчанию в папке Pages имеются следующие файлы:

_Layout.cshtml : мастер-страница, в которую вставляются страницы Razor

_ViewStart.cshtml : задает мастер-страницу

_ViewImports.cshtml : определяет директивы Razor, которые добавляются на каждую страницу Razor

_ValidationScriptsPartial.cshtml : частичное представление, которое подключает js-скрипты валидации на стороне клиента

Index.cshtml , Error.cshtml и Privacy.cshtml : собственно страницы Razor, которые определяют визуальную часть страницы и логику обработки запроса.

Подключение Razor Pages

Для подключения сервисов Razor Pages применяется метод AddRazorPages . Например, во вновь созданном проекте мы можем увидеть в классе Startup в методе ConfigureServices подключение Razor Pages:

В действительности Razor Pages работают поверх фреймворка MVC, поэтому мы можем подключить и с помощью метода AddMvc() :

Однако AddMvc() подключает в целом всю возможную функциональность фреймворка MVC, в том числе возможность использования контроллеров с представлениями. Если мы не собираемся использовать контроллеры, то логично подключать Razor Pages с помощью метода AddRazorPages() .

Маршрутизация в RazorPages

Непосредствено для связи с Razor Pages применяется метод endpoints.MapRazorPages() . В остальных аспектах класс Startup не отличается от того, что мы имеем в проекте MVC.

В итоге строка запроса URL будет сопоставляться с определенной страницей Razor на основании ее расположения в проекте в папке Pages. Примеры строк URL и сопоставленных с ними страниц:

Путь к странице

/Store или /Store/Index

Обработка запросов

В начале идет директива @page , которая по сути и делает обычное представление страницей Razor. Эта директива позволяет страницам обрабатывать запросы напрямую без контроллеров.

Следующая директива - @model определяет модель представления - в данном случае класс IndexModel.

С этой страницей связан файл кода Index.cshtml.cs :

Модель страницы наследуется от класса PageModel. Данная модель определяет переменную _logger , в которую в конструкторе через механизм Dependency Injection передается класс логгера для осуществления логгирования.

Кроме того, в классе модели определен метод OnGet . Этот метод обрабатывает GET-запросы. В данном случае он пуст.

Запустим проект на выполнение. Фактически страницы Razor могут обрабатывать запросы так же, как и контроллеры. Например, обратимся к Index.cshtml и для этого введем адрес /Index :

Обращение к Razor Page в ASP.NET Core

Поскольку страница Index.cshtml по умолчанию сопоставляется с корнем приложения, то для обращения к ней можно не указывать Index.

Подобным образом для обращения к странице Privacy надо перейти по адресу /Privacy .

Новый движок представлений, над которым мы работаем, оптимизирован под генерацию HTML-кода, фокусируясь на коде шаблона. Кодовое имя для данного движка – “Razor”, первая бета-версия будет доступна уже скоро.

Цели разработки

Выбор и Гибкость

AddView9

Hello World и Razor

Razor позволяет вам начать со статического HTML (или любого текстового содержимого), далее делая его динамическим, добавляя серверный код. Одна из основных целей проектирования Razor’a, была предоставить гибкий процесс кодирования и позволить быстро интегрировать серверный код в HTML-разметку с минимумом усилий.

image

Как это выглядит при использовании .ASPX кода

image

Хотелось бы поделится одним наблюдением для данного примера – каждая область кода, требует 5 символов (<%= %>) для начала и конца последовательности кода. Некоторые из данных символов (в особенности клавиша %, которая на большинстве клавиатур располагается в верхней центральной части) не совсем просто набирать.

Как это выглядит с Razor синтаксисом

Обратите внимание на начало области кода в Razor, где используется символ @. В отличии от <% %>, Razor не требует от вас явно закрывать область кода:

image

Даже в таком тривиальном “hello world” примере мы уберегли себя от 12 лишний нажатий клавиш, которые нам пришлось бы делать раньше. Набрать символ @ на клавиатуре гораздо проще, чем символ %.

Циклы и вложенный HTML

Давайте рассмотрим другой случай, когда вам нужно вывести список продуктов (и цену напротив каждого):

image

Создаем пример с .ASPX

image

Создаем пример с Razor

Ниже я покажу, как сгенерировать эквивалентное представление, используя Razor:

image

Razor так же достаточно умен, чтобы распознать @p.Name и @p.Price выражения внутри элемента <li>, как серверный код и выполнить его для каждого прохода цикла. Обратите внимание, Razor автоматически закрывает области кода @p.Name и @p.Price основываясь на совместном использовании HTML и кода.

Возможность писать код таким образом, не требуя добавлять множество открывающих и закрывающих меток по всему шаблону делает весь процесс разработки реально быстрым.

Блоки if и многострочные выражения

Ниже представлено несколько примеров распространенных ситуаций:

If выражения

image

Многострочные выражения

Вы можете обозначать несколько строчек кода обернув их в блок @< код > следующим образом:

image

Обратите внимание, что переменные могут быть разбиты на несколько серверных блоков кода, переменная “message” объявлена в многострочном блоке @< >, а также использована в блоке кода message. Точно так же, как и в синтаксисе .aspx файлах <% %> и <%= %>.

Комплексные выражения

Синтаксис @( ) позволяет размещать комплексные выражения. Например, мы можем переписать выше указанный код для конкатенации строки и числа вместе, внутри блока @ ( код ):

image

Интеграция содержимого и кода

Парсер Razor знает множество особенностей языка, позволяя полностью доверится ему, а не проводить время за собственной реализацией.

Конфликтует ли он с email-адресами и другими местами использования @ в HTML?

Парсер Razor достаточно умен, чтобы в большинстве случаев определить, используется ли символ @ в коде или в статическом содержимом. Например, ниже я используя символ @, как часть email-адреса:

image

image

В случае, где содержимое валидно, как код, а вы хотите вывести его как статическое, достаточно явно указать два символа @@ вместо одного.

Определение вложенного содержимого

Размещая HTML-содержимое внутри if/else, foreach или других блочных выражений, следует обернуть внутреннее содержимое HTML или XML элементов для лучшего определения начала области содержимого.

Например, ниже, я обернул многострочный блок содержимого (который включает в себя фигурные скобки) в тег <span>:

image

Это сгенерирует следующий код для клиента, включая элемент <span>:

image

По желанию, вы можете обернуть вложенное содержимое в блок <text> в случаях, когда ваши данные должны сгенерироваться для клиента без тега обвертки:

image

Данный код сгенерирует ниже представленное содержимое для клиента, обратите внимание – никаких обворачивающих тегов:

image

Кодирование HTML

По умолчанию содержимое, использующее блок @ автоматически HTML-кодированно для улучшенной защиты против XSS атак.

Макет/MasterPage — Основы

Простейший пример макета

Ниже представлен простой пример страницы макета, которое мы сохраним под названием “SiteLayout.cshtml”. Он может содержать любой статический HTML, а также любой динамический серверный код. Далее добавим вызов вспомогательного метода “RenderBody()” в том месте, где мы хотим вывести определённое тело содержимого для запрашиваемого URL:

image

Далее мы можем создать шаблон представления, назвав его “Home.cshtml”, которое содержит только нужный код или содержимое для построения определенного тела запрашиваемой страницы и основывается на шаблоне макета:

image

Когда мы сгенерируем Home.cshtml, как шаблон представления, он объединит содержимое макета и под-страницы, и отошлет содержимое клиенту:

image

Компактный, чистый и выразительный код

Хотелось бы обратить внимание на код выше и заметить, что определение макета и его использование из представлений/страниц имеет маленький размер. Код на скриншоте содержит все содержимое SiteLayout.cshtml и Home.cshtml файлов, нет никаких дополнительных настроек или тегов, нет префикса %@Page % и другой различной разметки или заданных свойств.

Мы стараемся держать код, который вы пишете, в наиболее компактном и простом виде. Мы также хотим позволить любому открывать файлы в сторонних текстовых редактора и изменять код. Не требуется никакой дополнительной генерации кода или intellisense.

Макет/MasterPage – Добавляем заменяемые части

Макет страниц поддерживает возможность определять внутри различные “секции”, которые могут изменять представления собственным содержимым. Это позволяет вам с легкостью изменять/заполнять прерывающиеся секции содержимого на странице макета и предоставляет гибкость макета для вашего сайта.

image

Так как две секции помечены, как “optional”, я не обязан определять их в моем Home.cshtml файле. Мой сайт продолжает прекрасно работать, даже если их там нет.

Давайте вернемся обратно в Home.cshtml и объявим собственные части Menu и Footer. Скриншот ниже, содержит весь код Home.cshtml, больше ничего не потребуется. Однако, я перенес настройки LayoutPage на глобальный уровень, так что их здесь больше нет.

image

Наши собственные секции перезаписывают “menu” и “footer” с помощью объявленных в файле блоков @section. Мы решили не требовать обвертывать содержимое “main/body” внутри секции, а вместо этого просто оставить её в строковом виде (это позволяет сократить количество нажатий и позволит с легкостью добавлять секции на страница макета, не требуя пробегаться по всем страницам изменяя их синтаксис)

Когда мы снова сгенерируем Home.cshtml как шаблон представления, он объединит содержание макета и под-страницы, интегрируя две новых части страницы и вернет клиенту следующее:

image

Инкапсуляция и повторное использование HTML-помощников

Мы рассмотрели, как обеспечить единый вид веб-сайта, используя страницы макета. Давайте теперь рассмотрим, как создавать повторно используемые HTML-вспомогательные методы, которые дают нам чистую инкапсуляцию для генерации HTML, и которые мы можем использовать в нашем сайте или даже в рамках нескольких разных сайтов.

Программные HTML-помощники

image

Декларативные HTML-помощники

Генерация HTML на основе одного класса кода работает, но не является идеальной.

Одной из возможностей в Razor является простой путь для создания повторно используемых HTML-помощников, используя более декларативный подход. Наш план заключается в том, чтобы дать вам возможность объявлять повторно используемые помощники с помощью декларативного синтаксиса helper < >, как показано ниже.

image

Вы сможете размещать .cshtml файлы, которые содержат данные помощники в директории Views\Helpers и в последствии заново использовать их в любом представлении или странице на вашем сайте (никаких дополнительных действий не потребуется):

image

Обратите внимание, как помощник ProductListing() определяет аргументы и параметры. Вы можете передавать любые параметры, какие захотите (включая необязательные параметры, типы допускающие значения NULL, генерики и т.п.). Вы так же сможете отлаживать данный код в Visual Studio.

Важно: helper синтаксис не будет доступен в первой бета-версии Razor, мы надеемся он будет доступен в следующих версиях. Вспомогательные методы оформленные в виде кода, будут работать сразу.

Передача строковых шаблонов, как параметров

Другая полезная (и нереально мощная) возможность, которую мы предоставляем с Razor – это возможность передавать “строковые шаблонные” параметры во вспомогательные методы. Данные “строковые шаблоны” могут содержать в себе, как HTML, так и код, и могут быть вызваны по требованию вспомогательного метода.

Ниже вы видите пример данной функциональности в действии, я использую HTML-помощник “Grid”, который генерирует DataGrid для клиента:

image

Параметр “format”, который мы передаем, когда объявляем столбец, является “строчным шаблоном”, он содержит и html и код, мы также можем настроить под себя формат данных. А самое прекрасное – это что помощник Grid’a может вызывать наш строчный шаблон, как метод делегата, и может вызывать его, когда нужно и сколько раз хочет. В данном случае он будет вызывать каждый раз, когда он генерирует строку грида и передает в “элемент”, который может использовать наш шаблон для отображения результата.

Данная возможность позволит разрабатывать более мощные HTML-вспомогательные методы. Вы сможете реализовывать их, как в коде (так вы это делаете сегодня), так и используя декларативный подход helper< >.

Поддержка в Visual Studio

Как я уже замечал ранее, одной из основных целей Razor – минимизировать количество нажатий клавиш, а также легко редактировать код любым текстовым редактором. Мы постарались держать синтаксис чистым, компактным и простым.

image

Обратите внимание, каким образом отработал intellisense для объекта Product на “ @p.”, внутри элемента <li>. Заметьте, в Solution Explorer в папке \Views присутствуют оба шаблона представлений .aspx и .cshtml. Вы можете использовать различные движки представлений в одном приложении, давая возможность прочувствовать, какой синтаксис вам по душе.

Выводы

Все разработчики, которые тестировали проект последние несколько месяцев, оставили крайне позитивные отзывы. Мы собираемся предоставить публичную бета-версию, как можно скорее и конечно же ожидаем услышать ваше мнение.

  1. Запустите приложение Asmwsoft Pc Optimizer.
  2. Потом из главного окна выберите пункт "Clean Junk Files".
  3. Когда появится новое окно, нажмите на кнопку "start" и дождитесь окончания поиска.
  4. потом нажмите на кнопку "Select All".
  5. нажмите на кнопку "start cleaning".

Clean Registry to fix microsoft.aspnet.razor.runtime.precompilation.dll has stopped working error

  1. Запустите приложение Asmwsoft Pc Optimizer.
  2. Потом из главного окна выберите пункт "Fix Registry problems".
  3. Нажмите на кнопку "select all" для проверки всех разделов реестра на наличие ошибок.
  4. 4. Нажмите на кнопку "Start" и подождите несколько минут в зависимости от размера файла реестра.
  5. После завершения поиска нажмите на кнопку "select all".
  6. Нажмите на кнопку "Fix selected".
    P.S. Вам может потребоваться повторно выполнить эти шаги.

Clean Registry to fix microsoft.aspnet.razor.runtime.precompilation.dll has stopped working error

  1. Нажмите правой кнопкой мыши на «Мой компьютер» на рабочем столе и выберите пункт «Свойства».
  2. В меню слева выберите " Advanced system settings".
  3. В разделе «Быстродействие» нажмите на кнопку «Параметры».
  4. Нажмите на вкладку "data Execution prevention".
  5. Выберите опцию " Turn on DEP for all programs and services . " .
  6. Нажмите на кнопку "add" и выберите файл microsoft.aspnet.razor.runtime.precompilation.dll, а затем нажмите на кнопку "open".
  7. Нажмите на кнопку "ok" и перезагрузите свой компьютер.
Как другие пользователи поступают с этим файлом?

Всего голосов ( 181 ), 115 говорят, что не будут удалять, а 66 говорят, что удалят его с компьютера.

Contracor

Вы не смогли дозвониться до нас или ограничены во времени. Просто сообщите номер телефона, предпочтительное время звонка и тематику разговора, и наши специалисты обязательно свяжутся с Вами.

Пескоструйная установка Contracor Razor Z-100 RCS

Расход воздуха, м3/мин 2,3-9,6
Давление, бар 10
Производительность, м2/час до 37
Габариты, мм 508x1226
Объем бункера, л 100
Вес, кг 110

Аппарат Razor Z-100 RCS с дистанционным управлением и дозатором SGV предназначен для пескоструйной очистки металлических конструкций и сооружений, бетонных поверхностей.

Технические характеристики:

  • Степень очистки до SA-3,0;
  • Производительность до 37 м2/ч (смотри таблицу производительности);
  • Предназначен для работы с любым сухим песком фракцией до 3,5 мм;
  • Рабочая температура: от -10 до +50°C.

Стандартный комплект поставки:

  • бак на 100 литров,
  • сито,
  • крышка,
  • дозатор SGV;
  • расходный вентиль абразива,
  • высокоэффективный фильтр влаго-маслоотделитель;
  • удобная ревизия;
  • обрезиненные фитинги и трубная арматура;
  • блок дистанционного управления (ДУ):
    • вентиль ДУ,
    • пульт ДУ,
    • 20 м сдвоенного рукава ДУ,
    • набор фитингов.



    Аппарат Contractor Razor Z-100 RCS оборудован эффективным воздушным фильтром-влагомаслоотделителем CAF-3, который не допускает попадание в бак конденсата и масел от компрессора.


    Все участки фитингов и трубной арматуры, контактирующие с проходящим потоком абразива, обрезинены, благодаря чему значительно снижается износ, а также необходимость в сложном ремонте по замене данных участков.


    Вентиль ДУ / Сдвоенный рукав ДУ / Пульт ДУ

    Читайте также: