#c# #visual-studio #razor-pages
Вопрос:
Согласно документации, представления Razor по умолчанию должны перекомпилироваться при изменении в локальных средах для ASP.NET Ядро 3.0.
Однако мой проект не делает этого локально. Если я изменяю представление и обновляю его при локальной отладке, это изменение не отражается. Я должен остановить решение, повторить запуск, а затем увидеть изменения.
Я делаю это по умолчанию ASP.NET Основной шаблон веб-приложения в Visual Studio 2019 с ASP.NET Ядро 3.0.0 Предварительный просмотр 2 с использованием страниц Razor. Есть идеи, нужно ли мне изменить настройки, чтобы включить эту функцию?
ОБНОВЛЕНИЕ НОЯБРЬ 2019 ДЛЯ ПОЛНОЙ ВЕРСИИ 3.0:
Этот вопрос все еще вызывает много мнений. Несколько ответов были процитированы, чтобы добавить
services.AddControllersWithViews().AddRazorRuntimeCompilation();
В вашу ConfigureServices()
функцию Startup.cs
после добавления Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
пакета NuGet. В моем случае я использую только страницы Razor, поэтому я не звоню AddControllersWithViews()
. Вместо этого это сработало для меня:
services.AddRazorPages().AddRazorRuntimeCompilation();
Комментарии:
1. .представления cshtml razor действительно перекомпилируются. Вы можете перепроверить? Попробуйте добавить тест <h1><h1></h1>. Запустите приложение, загрузите страницу. вы должны увидеть «Тест». Затем измените это на <h1>Foo<h1></h1>. Вы должны увидеть «Фу».
2. Не работает! Я должен остановиться и начать решение. Запечатлел это здесь: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… — Пробовал на нескольких машинах использовать стандартный шаблон страниц Razor.
3. Вы работаете на Mac, ПК или linux? Кроме того, это может быть проблемой с предварительным просмотром. Можете ли вы попробовать использовать asp.net ядро 2.x?
4. ПК, предварительный просмотр Visual Studio 2019. Я попробовал с 2.2, и это работает! Итак, в версии 3.0 кое-что изменилось.
5. Я нахожусь на полностью обновленном .net core 3/VS и должен был добавить
.AddRazorRuntimeCompilation();
Спасибо!
Ответ №1:
Для ASP.NET Версия выпуска Core 3:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0
Он также может быть включен условно только для местного развития, приведенного по ссылке:
Компиляцию во время выполнения можно включить таким образом, чтобы она была доступна только для локальной разработки. Условное включение таким образом гарантирует, что опубликованные выходные данные:
Использует скомпилированные представления.
Имеет меньший размер.
Не позволяет наблюдателям за файлами в рабочей среде.
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
Env = env;
}
public IWebHostEnvironment Env { get; set; }
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
Комментарии:
1. Совет о версиях пакета nuget, связанных с . Версия Net core. На случай, если вы используете . Net Core 3.0, вы не можете выбрать более поздние версии этого пакета Nuget. Но версия 3.0.0 библиотеки Nuget работает с .Net Core 3.0. Если вы используете . Net Core 3.1, вы можете выбрать более новые версии.
Ответ №2:
Хорошо, похоже, что это еще не поддерживается 🙁
Компиляция во время выполнения удалена в результате очистки ASP.NET Основная общая платформа, чтобы не зависеть от Roslyn, поддержка компиляции страниц и представлений во время выполнения также была удалена в этом предварительном выпуске. Вместо этого компиляция страниц и представлений выполняется во время сборки. В будущем предварительном обновлении мы предоставим пакеты NuGet для дополнительного включения поддержки компиляции во время выполнения в приложении.
Вы можете прочитать больше об этой проблеме здесь https://github.com/aspnet/Announcements/issues/343
Приложения, которым требуется компиляция во время выполнения или повторная компиляция файлов Razor, должны:
- Добавьте ссылку на
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
пакет. Он будет доступен как часть выпуска 3.0.0-preview3. - Обновите приложение
ConfigureServices
, чтобы включить вызов наAddMvcRazorRuntimeCompilation
:
Комментарии:
1.
AddMvcRazorRuntimeCompilation
находитсяAddRazorRuntimeCompilation
с ASP.Net Предварительный просмотр ядра 3.0 4
Ответ №3:
Чтобы вернуть компиляцию представления времени выполнения в ASP.NET Core
3
- Ссылка
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
- Вызов
services.AddMvc().AddRazorRuntimeCompilation()
- Удалите
Microsoft.VisualStudio.Web.CodeGeneration.Design
, если в пакете есть несоответствие версииMicrosoft.CodeAnalysis.Common
Комментарии:
1. Просто подсказка для других: при использовании Nuget отметьте/установите флажок «предварительный выпуск».
2. Есть ли способ предотвратить развертывание активов в производство? Я попробовал несколько комбинаций частных наборов на упаковке, но, похоже, это не работает.
3. В ядре 2.2 razor options есть файлообменники, и он работает даже без какой-либо перекомпиляции. Просто отредактируйте cshtml и вуаля. В ядре 3 это свойство удалено. 🙁 github.com/aspnet/AspNetCore/issues/14572
4. 1 из-за удаления кодирования Microsoft.VisualStudio.Web.. Дизайн упаковки был секретным соусом, о котором больше нигде не упоминается.
5. @tkburbidge Я тоже только что столкнулся с этой проблемой с пакетом. Как ни странно, у меня было две строки, которые были совершенно одинаковыми, спина к спине. Я удалил и то, и другое и смог скомпилировать. Еще более странно , что затем я вернул строки на место и все еще смог скомпилировать.
Ответ №4:
Компиляция во время выполнения включена с помощью Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
пакета. Чтобы включить компиляцию во время выполнения, приложения должны:
- Установите
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
пакет NuGet. - Обновите метод проекта
Startup.ConfigureServices
, чтобы включить вызовAddRazorRuntimeCompilation
:
services
.AddControllersWithViews()
.AddRazorRuntimeCompilation();
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0
Ответ №5:
Чтобы вернуть компиляцию представлений Razor во время выполнения в ASP.NET Ядро 3.1:
- Установите
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
пакет NuGet. - Обновите метод проекта
Startup.ConfigureServices
, чтобы включить вызовAddRazorRuntimeCompilation
. services.AddRazorPages().AddRazorRuntimeCompilation()
;
Ответ №6:
Шаг 1. Установите приведенный ниже пакет из диспетчера пакетов NuGet для решения.
Майкрософт.AspNetCore.Mvc.Бритва.Компиляция времени выполнения
Шаг 2: Добавьте приведенный ниже код в конфигурационные службы файла Startup.cs
Услуги.AddControllersWithViews().AddRazorRuntimeCompilation();
Сохраните страницу, а затем обновите браузер клиента.
Если вы используете Razor, добавьте код для служб.AddRazorPages().AddRazorRuntimeCompilation();
Ответ №7:
В .NET Core 3.1 вам необходимо отключить генерацию views.dll
файла.
- Добавьте приведенный ниже код в свой
.csproj
файл (в корень вашего проекта).:<PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <UserSecretsId>...</UserSecretsId> <!-- add from this line: --> <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory> <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory> <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish> <RazorCompileOnBuild>false</RazorCompileOnBuild> <!-- to this line. --> </PropertyGroup>
- Установите приведенный ниже пакет из менеджера пакетов NuGet для решения.
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
- Добавьте приведенный ниже код в
ConfigureServices
метод вашегоStartup.cs
файла:services.AddMvc().AddRazorRuntimeCompilation();
Или
services.AddControllersWithViews().AddRazorRuntimeCompilation();
Или
services.AddRazorPages().AddRazorRuntimeCompilation();
После этого снова опубликуйте и запустите его. Это сработает.
Комментарии:
1. Для моего .NET 5.0 внутри .csproj требовались только следующие теги
<RazorCompileOnBuild>false</RazorCompileOnBuild> <RazorCompileOnPublish>false</RazorCompileOnPublish> <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
, также требовались все остальные 2 и 3 шага
Ответ №8:
Просто добавленное примечание-возможно, вы захотите включить эту компиляцию во время выполнения только условно, чтобы опубликованные выходные данные:
- Использует скомпилированные представления.
- Имеет меньший размер.
- Не позволяет наблюдателям за файлами в рабочей среде.
Ответ №9:
Самый простой способ настроить компиляцию среды выполнения только для локальной разработки-обновить профили запуска в launchSettings.json
. Этот метод не требует изменений кода для настройки проекта, который выполняется локально (это не повлияет на ваше производство).
Смотрите официальную документацию:
- Установите Microsoft.AspNetCore.Mvc.Бритва.Пакет NuGet для компиляции во время выполнения.
- Измените раздел Переменные среды профиля запуска в файле launchSettings.json:
- Для проверки
ASPNETCORE_ENVIRONMENT
установлено значение «Разработка».- Установите
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
значение «Microsoft.AspNetCore.Mvc.Бритва.Компиляция времени выполнения».
Пример:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:57676",
"sslPort": 44364
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
}
},
"RazorPagesApp": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
}
}
}
}