Перекомпиляция во время выполнения Razor, похоже, не работает с файлами компонентов *.razor

#c# #asp.net-core #razor-components

#c# #asp.net-core #razor-components

Вопрос:

Я тестирую новые компоненты Razor (он же. Ошибка на стороне сервера) и я нахожу необходимым остановить проект, отредактировать, перекомпилировать и перезапустить сервер, что отнимает очень много времени. Я хочу отредактировать файлы *.razor, сохранить, нажать F5 в браузере и готово.

Я знаю, что есть критическое изменение в ASP.NET Ядро 3, которое на некоторое время предотвратило это. Но теперь есть «исправление»: вам просто нужно установить пакет Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation и настроить службу подобным образом:

 services.AddMvc()
.AddRazorRuntimeCompilation();
  

(Да, без Mvc, смотрите это)

Но, похоже, это не работает — по крайней мере, я не пробовал с файлами cshtml, поскольку я использую только *.razor в своих тестах.

Я также сделал:

 services.AddMvc()
.AddRazorRuntimeCompilation((options) =>
{
    foreach (var item in Directory.GetFiles(Directory.GetCurrentDirectory(), "*.razor", SearchOption.AllDirectories))
    {
        options.AdditionalReferencePaths.Add(item);
    }
});
  

Безуспешно.

Это еще не поддерживается или я делаю что-то неправильно?

Комментарии:

1. Я не думаю, что это действительно применимо к компонентам Razor. Речь идет о компиляции представления. Компоненты Razor фактически отображаются в DOM-представлении в памяти, которое, судя по его звучанию, было бы сложно изменять каждый раз, когда вы вносите изменения в файл *.razor. Перестройка приводит к удалению дерева в памяти, поэтому оно затем создается заново (таким образом, применяется ваше обновление). Возможно, вам было бы лучше задать этот вопрос в выпуске на странице проекта Github.

2. Нашел это: github.com/aspnet/AspNetCore/issues/8071

3. Привет. Что вы знаете. Мое предположение было в значительной степени правильным. Хотя, немного о dotnet watch, я не рассматривал. Это должно сработать для вас. Вам все равно придется перестроить, но это фактически автоматически запустит сборку для вас.

4. @ChrisPratt точно. Однако основной проблемой для меня является потеря состояния приложения. Но, я думаю, это лучше, чем ничего..

5. Компоненты Razor, похоже, не являются «не имеющими состояния», и я предполагаю, что если мне удастся поддерживать браузер открытым (пытаясь сохранить состояние) между сборками, это приведет к поломке