Страница.NET Core MVC не обновляется после изменений

Я собираю.NET Core MVC на последней версии 2.2. У меня проблема при внесении изменений в файл CSHTML и обновлении страницы, мои изменения не отображаются в браузере. Я должен перезапустить проект, чтобы увидеть мои изменения. Это происходило некоторое время, поэтому я не совсем уверен, какие изменения вызвали эту проблему.

Я пытался использовать Chrome "Пустой кэш и жесткая перезагрузка", а также другие браузеры, но безрезультатно. Это происходит в Windows и Mac с использованием Visual Studio для Mac и VS Code.

В стандартном проекте.Net Core он работает нормально, поэтому в моем проекте должно быть что-то, что изменилось. Мне интересно, где мне нужно начать, чтобы отладить эту проблему? Я пытался комментировать почти все в моем Startup.csа также Program.cs без разрешения.

17 ответов

В ASP.NET 3.0 Ядро и выше,RazorViewEngineOptions.AllowRecompilingViewsOnFileChangeне доступен.

Удивившись, что обновление представления во время работы приложения не помогло, я обнаружил следующее решение:

  1. Добавить в проект пакет NuGet https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation/
  2. Добавьте следующее в Startup.cs:

    services.AddControllersWithViews().AddRazorRuntimeCompilation();

Вот полное объяснение любопытных...

HTH

Кажется, в ASP.NET Core 2.2 было сделано изменение (и я не могу найти никаких объявлений об этом изменении). Если вы явно не работаете в среде "Разработка", то Razor Views компилируются, и вы не увидите никаких изменений, внесенных в.cshtml.

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

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

Я только что создал новый проект, используя последний шаблон ASP.NET MVC Core 3.1, и изменил следующее, чтобы включить перекомпиляцию среды выполнения для отладки:

Эталонный пакет NuGet - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.

Startup.cs - ConfigureServices(службы IServiceCollection) БЫЛ:

// stuff...

services.AddControllersWithViews();

// more stuff...

СЕЙЧАС:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

В дополнение к ответу Александра Христова , начиная с ASP.NET Core 3.1, вы можете включить компиляцию представления для среды разработки без изменений в <tcode id="46144290"></tcode>файл :

  1. Установите пакет NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
  2. Установите следующие переменные среды (например, через раздел environmentVariables в launchSettings.json):
    • ASPNETCORE_ENVIRONMENT в «Развитие».
    • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES в "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

сначала установите Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation с помощью диспетчера nuget, после чего добавьте ниже код в свой startup.cs

services.AddRazorPages ().AddRazorRuntimeCompilation();

Для тех, кто использует Net Core 3.0 или выше

  1. Перейдите в Инструменты → Диспетчер пакетов Nuget → Управление пакетами nuget для решения.

  2. перейти на вкладку просмотра для просмотра из Интернета

  3. найдите RuntimeCompilation Нажмите Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

  4. установите его в предполагаемых проектах текущую стабильную версию

  5. открыть файл Startup.cs

  6. перейти к методу void ConfigureServices

  7. добавить строку: services.AddControllersWithViews().AddRazorRuntimeCompilation();

  8. вы сделали

Повторите попытку и посмотрите. Теперь вы можете обновить свои просмотры или страницы.

Вам нужно просто добавить это:

services.AddControllersWithViews();

в метод ConfigureService.

Имейте в виду, что приведенный ниже код недоступен в ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

Использование.net core 2.2, запускающего приложение с командой dotnet watch run проект перезапускается после каждого изменения

У меня была такая же проблема при работе над веб-приложением .NET 6 MVC.

Я установил Microsoft.AspNetCore.Mvc.Razor.Runtime.Compilation из диспетчера пакетов NuGet, а затем добавил.AddRazorRuntimeCompilation();после

      builder.services.AddControllersWithViews();

чтобы это выглядело так

builder.services.AddControllersWithViews().AddRazorRuntimeCompilation();

и это сработало!

Надеюсь, это помогло.

Ниже помогли мне, когда мнения были в отдельном проекте.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}

Есть два способа решить эту проблему:

1. Проверьте права доступа к папке, в которой находится ваш.sln-файл. Может возникнуть проблема с разрешениями на доступ к файлам, поскольку Visual Studio может не иметь доступа к файлам при запущенном сервере IIS Express, чтобы каждый раз отражать новые.cshtml-изменения. перезапустите сервер, поэтому я предлагаю отредактировать права доступа к папке:

Щелкните правой кнопкой мыши папку-> свойства-> безопасность-> нажмите кнопку редактирования -> проверьте все параметры-> сохранить.

Перезапустите Visual Studio, чтобы увидеть изменения.

Если это не работает, используйте 2 варианта.

2. В вашем проекте в файле startup.cs добавьте следующую строку ConfigureServices() в методе:

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

В моем случае у меня былоnuget установлен, но это была версия 5.xx. Обновление до 6.xx привело к правильному обновлению страниц при изменении. Так что обязательно обновляйтесь!

Мне удалось решить эту проблему в Rider, добавив ASPNETCORE_ENVIRONMENT=Development переменная окружения.

В Visual Studio 2022 Preview для этой цели, похоже, есть опция Hot Reload.

Кажется, он доступен и в Visual Studio 2019.

С помощью Hot Reload теперь вы можете изменять управляемый исходный код ваших приложений во время работы приложения без необходимости вручную приостанавливать или нажимать точку останова. Просто внесите поддерживаемое изменение во время работы вашего приложения, а в нашем новом интерфейсе Visual Studio используйте кнопку «Применить изменения кода», чтобы применить ваши изменения.

https://devblogs.microsoft.com/dotnet/introduction-net-hot-reload/

Вы абсолютно уверены, что используете 2.2? Проверьте ваш csproj, потому что это может быть эта ошибка https://github.com/aspnet/Razor/issues/2466 Вы можете попробовать отключить RazorCompileOnBuild дополнительная информация https://docs.microsoft.com/en-us/aspnet/core/razor-pages/sdk?view=aspnetcore-2.1

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

Итак, я решил выбросить мусорStartup.csи построитьProgram.csправильно. Тогда мой Hot Reloadначал работать.

У меня была аналогичная проблема с обновлением .net Core 3 до .net 5.0

Проблема возникла из-за старой зависимости в элементах управления Telerik, которую мы не могли изменить.

Исправлено изменением ссылок в файле .csproj

      <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.8.0" />

к

      <PackageReference Include="Microsoft.CodeAnalysis" Version="3.8.0" />

(ваша версия может быть другой)

Другие вопросы по тегам