Я создаю .NET Core MVC на последней версии 2.2. У меня проблема, когда я вношу изменения в файл CSHTML и обновляю страницу, мои изменения не отражаются в браузере. Мне нужно перезапустить проект, чтобы увидеть мои изменения. Это происходит уже некоторое время, поэтому я не совсем уверен, какое изменение вызвало эту проблему.
Я пробовал использовать Chrome «Пустой кеш и жесткая перезагрузка», а также другие браузеры, но безрезультатно. Это происходит в Windows и Mac с использованием Visual Studio для Mac и VS Code.
В проекте .Net Core по умолчанию он работает нормально, поэтому в моем проекте должно быть что-то, что изменилось в процессе. Мне интересно, с чего мне начать, чтобы отладить эту проблему? Я пробовал закомментировать почти все в своих Startup.cs
и Program.cs
без разрешения.
Для использования с библиотеками классов Rider и / или Razor (RCL), увидеть этот ответ.
Ух ты. Не ожидал этого. Настоящий облом. Через 2 года за него проголосовали всего 147 раз. Заставляет задуматься, кто создает приложения с .NET Core ...
Вы абсолютно уверены, что используете 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.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes()
Есть идеи, что означает это исключение? Все остальные страницы загружаются нормально. Только когда я редактирую файл и обновляю его, я получаю эту ошибку
Это сработало для меня. Чтобы установить его в зависимости от среды, добавьте IHostingEnvironment в метод Startup и сохраните его в свойстве. Тогда используйте что-нибудь вроде services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
спасибо, это сработало. Однако я думаю, что это довольно неловко и глупо, что Microsoft официально не объявляет о таких больших изменениях.
@kevskree то же самое происходит и со мной
Это не работает для ядра asp.net версии 3.1. Пожалуйста, предложите для 3.1
@Mayank Gupta: см. Ответ Александра Христова ниже (stackoverflow.com/a/57637903/198990). Его ответ сработал для меня (3.1).
Ниже мне помогло, когда просмотры были в отдельном проекте.
if (HostingEnvironment.IsDevelopment()){ // only in development (optional)
services.AddMvc().AddRazorOptions(o => {
o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
});
}
Это единственный ответ, который у меня сработал при работе с библиотеками классов Razor. Ваше здоровье!
Используя Core 3.1, следовали этим указаниям, установили версию 3.1.16 и получили ошибку: «IMVcBuilder» не содержит определения для «AddRazorRuntimeCompilation» и не может быть найден метод расширения «AddRazorRuntimeCompilation», принимающий первый аргумент типа «IMVcBuilder».
В ASP.NET Core 3.0 и вышеRazorViewEngineOptions.AllowRecompilingViewsOnFileChange
недоступен.
Удивленный тем, что обновление представления во время работы приложения не помогло, я обнаружил следующее решение:
Добавьте пакет NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation в проект
Добавьте в Startup.cs
следующее:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
Вот полное объяснение для любопытных.
У меня это не сработало по какой-то причине. Я использую Mac, если это имеет значение.
@ Накуль, какую версию ядра .net вы используете?
Когда я использовал эту команду: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/, я, похоже, получил два ответа: 2.1.13 и 3.0.0.
@Nakul, это то, что вы установили, какая версия ядра .net вашего приложения?
Потрясающий! У меня полностью работает на ASP.NET Core 3.0. В итоге я получил следующую строку: services.AddMvc().AddControllersAsServices().AddRazorRuntimeCompilation().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
У меня это отлично сработало на Mac и ASP.NET Core 3.1.
<PackageReference Include = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version = "3.1.2" /> services.AddControllersWithViews (). AddRazorRuntimeCompilatio n ();
Спасибо за подсказку; работал у меня на .Net Core 3.1.2
Спасибо за подсказку и за ссылку на статью в MSDN! Я следил за частью условно включить компиляцию среды выполнения, и это сработало. Судя по времени, необходимому для перекомпиляции довольно простого представления, я бы настоятельно рекомендовал этот способ вместо того, чтобы включать его всегда.
Ваусеры! 15 лет работы в .NET, и раньше это было легко. 1 день работы с .NET Core, и все кажется сломанным. А если серьезно - кто решил, что это хорошая идея сделать HTML скомпилированным и неизменяемым во время выполнения по умолчанию, а затем заставить разработчиков искать решение?
Спасибо! Работаем на .Net 5.0!
Я получаю это сообщение об ошибке - Пакет Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 6.0.0-preview.4.21253.5 несовместим с netcoreapp3.1
Похоже, Startup.cs - это то место, где можно найти все в .Net Core :)
Работал у меня на .NET 5
Спасибо ! Работа с Windows Visual Studio 2019 версии 16.11.3 и .net core 3.1.1
Подключен для меня в .Net 5 с VS 2019 16.11.5 - Какая боль!
У этого есть 20 пакетов предварительных условий OMG
services.AddMvc (options => options.EnableEndpointRouting = false) .AddRazorRuntimeCompilation (); - у меня это сработало в Startup.cs. Запись ASPNETCORE_HOSTINGSTARTUPASSEMBLIES в launchSettings.json ничего не сделала. FWIW тоже не может заставить работать Hot Reload. в .Net 6.
Мне удалось решить эту проблему в 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...
Это лучший ответ, не читая статью Алексея, которую стоит прочитать.
Вам нужно просто добавить это:
services.AddControllersWithViews();
методу ConfigureService.
Имейте в виду, что приведенный ниже код недоступен в ASP.NET Core 3.1:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
Вам необходимо установить пакет nuget, чтобы он заработал Microsoft.AspNetCore.Mvc.Razor.Runtime
Для тех, кто использует Net Core 3.0 или выше
Перейдите в Инструменты → Диспетчер пакетов Nuget → Управление пакетами nuget для решения.
перейти на вкладку просмотра для просмотра из Интернета
поиск RuntimeCompilation Щелкните Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
установите его на ваши предполагаемые проекты текущую стабильную версию
открыть файл Startup.cs
перейти к недействительному методу ConfigureServices
добавить строку: services.AddControllersWithViews().AddRazorRuntimeCompilation();
вы сделали
Повторите попытку и посмотрите. Теперь вы можете обновить свои просмотры или страницы.
В дополнение к Ответ Александра Христова, начиная с ASP.NET Core 3.1, вы можете включить компиляцию представления для среды разработки без изменений в файле Startup
:
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
NuGet.ASPNETCORE_ENVIRONMENT
в "Разработка".ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
в "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".Это должен быть принятый ответ; он обеспечивает желаемую функциональность без изменения файла запуска.
сначала установите 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/
Я сталкиваюсь с тем же исключением MissingMethodException, которое вы упомянули ниже ... Вы когда-нибудь догадались об этом? Если так, не могли бы вы ответить на свой вопрос?