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

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

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

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

Я сталкиваюсь с тем же исключением MissingMethodException, которое вы упомянули ниже ... Вы когда-нибудь догадались об этом? Если так, не могли бы вы ответить на свой вопрос?

IEnjoyEatingVegetables 20.08.2019 21:59

Для использования с библиотеками классов Rider и / или Razor (RCL), увидеть этот ответ.

Uwe Keim 15.11.2020 12:28

Ух ты. Не ожидал этого. Настоящий облом. Через 2 года за него проголосовали всего 147 раз. Заставляет задуматься, кто создает приложения с .NET Core ...

dpant 31.05.2021 09:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
174
3
69 292
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Вы абсолютно уверены, что используете 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#properties

Ответ принят как подходящий

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

Однако вы можете отключить это, используя некоторую конфигурацию в своем классе запуска, как показано ниже.

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

Для ASP.NET Core 3.0 и выше см. отвечать Александра Христова.

Спасибо. Однако, похоже, когда я включаю это, делаю изменение в html, а затем обновляюсь, я получаю следующее исключение: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAna‌​lysis.Emit.EmitConte‌​xt)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.‌​ISymbol.GetAttribute‌​s() Есть идеи, что означает это исключение? Все остальные страницы загружаются нормально. Только когда я редактирую файл и обновляю его, я получаю эту ошибку

kevskree 19.12.2018 06:33

Это сработало для меня. Чтобы установить его в зависимости от среды, добавьте IHostingEnvironment в метод Startup и сохраните его в свойстве. Тогда используйте что-нибудь вроде services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));

KuriosCurious 18.04.2019 22:49

спасибо, это сработало. Однако я думаю, что это довольно неловко и глупо, что Microsoft официально не объявляет о таких больших изменениях.

Code_Worm 12.08.2019 20:04

@kevskree то же самое происходит и со мной

IEnjoyEatingVegetables 20.08.2019 22:00

Это не работает для ядра asp.net версии 3.1. Пожалуйста, предложите для 3.1

Mayank Gupta 19.01.2020 16:59

@Mayank Gupta: см. Ответ Александра Христова ниже (stackoverflow.com/a/57637903/198990). Его ответ сработал для меня (3.1).

Sandor Drieënhuizen 18.02.2020 16:09

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

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

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

Это единственный ответ, который у меня сработал при работе с библиотеками классов Razor. Ваше здоровье!

Sipke Schoorstra 09.09.2019 20:51

Используя Core 3.1, следовали этим указаниям, установили версию 3.1.16 и получили ошибку: «IMVcBuilder» не содержит определения для «AddRazorRuntimeCompilation» и не может быть найден метод расширения «AddRazorRuntimeCompilation», принимающий первый аргумент типа «IMVcBuilder».

Clarence 27.06.2021 08:27

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

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

  1. Добавьте пакет NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation в проект

  2. Добавьте в Startup.cs следующее:

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

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

У меня это не сработало по какой-то причине. Я использую Mac, если это имеет значение.

Nakul Tiruviluamala 10.10.2019 05:50

@ Накуль, какую версию ядра .net вы используете?

Alexander Christov 10.10.2019 05:58

Когда я использовал эту команду: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/, я, похоже, получил два ответа: 2.1.13 и 3.0.0.

Nakul Tiruviluamala 10.10.2019 09:47

@Nakul, это то, что вы установили, какая версия ядра .net вашего приложения?

Alexander Christov 10.10.2019 09:53

Потрясающий! У меня полностью работает на ASP.NET Core 3.0. В итоге я получил следующую строку: services.AddMvc().AddControllersAsServices().AddRazorRuntime‌​Compilation().SetCom‌​patibilityVersion(Co‌​mpatibilityVersion.V‌​ersion_3_0);

mvdgun 18.10.2019 05:03

У меня это отлично сработало на Mac и ASP.NET Core 3.1.

user3071284 16.12.2019 23:31

<PackageReference Include = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version = "3.1.2" /> services.AddControllersWithViews (). AddRazorRuntimeCompilatio‌ n ();

M Komaei 29.02.2020 10:06

Спасибо за подсказку; работал у меня на .Net Core 3.1.2

jawa 04.03.2020 12:51

Спасибо за подсказку и за ссылку на статью в MSDN! Я следил за частью условно включить компиляцию среды выполнения, и это сработало. Судя по времени, необходимому для перекомпиляции довольно простого представления, я бы настоятельно рекомендовал этот способ вместо того, чтобы включать его всегда.

Sergey Kudriavtsev 09.03.2020 01:06

Ваусеры! 15 лет работы в .NET, и раньше это было легко. 1 день работы с .NET Core, и все кажется сломанным. А если серьезно - кто решил, что это хорошая идея сделать HTML скомпилированным и неизменяемым во время выполнения по умолчанию, а затем заставить разработчиков искать решение?

Jason Snelders 09.05.2020 13:22

Спасибо! Работаем на .Net 5.0!

Ignacio 17.02.2021 13:55

Я получаю это сообщение об ошибке - Пакет Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 6.0.0-preview.4.21253.5 несовместим с netcoreapp3.1

Anil P Babu 01.06.2021 10:09

Похоже, Startup.cs - это то место, где можно найти все в .Net Core :)

Tejasvi Hegde 13.08.2021 08:25

Работал у меня на .NET 5

Mehdi Daustany 27.09.2021 01:05

Спасибо ! Работа с Windows Visual Studio 2019 версии 16.11.3 и .net core 3.1.1

Jesus Mostajo 27.09.2021 12:37

Подключен для меня в .Net 5 с VS 2019 16.11.5 - Какая боль!

JClarkCDS 27.10.2021 00:36

У этого есть 20 пакетов предварительных условий OMG

Cătălin Rădoi 13.11.2021 17:44

services.AddMvc (options => options.EnableEndpointRouting = false) .AddRazorRuntimeCompilation (); - у меня это сработало в Startup.cs. Запись ASPNETCORE_HOSTINGSTARTUPASSEMBLIES в launchSettings.json ничего не сделала. FWIW тоже не может заставить работать Hot Reload. в .Net 6.

George Beier 03.12.2021 04:48

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

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

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

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

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

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

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

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...

Это лучший ответ, не читая статью Алексея, которую стоит прочитать.

Waragi 07.02.2020 16:23

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

services.AddControllersWithViews();

методу ConfigureService.

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();

Вам необходимо установить пакет nuget, чтобы он заработал Microsoft.AspNetCore.Mvc.Razor.Runtime

Mayank Gupta 19.01.2020 17:14

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

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

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

  3. поиск RuntimeCompilation Щелкните Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.

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

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

  6. перейти к недействительному методу ConfigureServices

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

  8. вы сделали

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

В дополнение к Ответ Александра Христова, начиная с ASP.NET Core 3.1, вы можете включить компиляцию представления для среды разработки без изменений в файле Startup:

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

Это должен быть принятый ответ; он обеспечивает желаемую функциональность без изменения файла запуска.

Tom Regan 01.02.2021 16:53

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

services.AddRazorPages (). AddRazorRuntimeCompilation ();

У меня была аналогичная проблема с обновлением .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" />

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

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

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

With Hot Reload you can now modify your apps managed source code while the application is running, without the need to manually pause or hit a breakpoint. Simply make a supported change while your app is running and in our new Visual Studio experience use the “apply code changes” button to apply your edits.

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

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