Вчера обновился до net core 2.1.
Теперь, если я отлаживаю, представления предварительно компилируются, что, конечно же, занимает много времени во время запуска ... Можно ли вернуться к предыдущему поведению, когда представления компилируются вовремя, если это необходимо?
У меня нет ссылки на предварительную компиляцию в моем csproj. Это что-то из метапакета?
<ItemGroup>
<PackageReference Include = "JetBrains.Annotations" Version = "11.1.0" />
<PackageReference Include = "Microsoft.AspNetCore.All" Version = "2.1.0" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.Tools" Version = "2.1.0" PrivateAssets = "All" />
<PackageReference Include = "Swashbuckle.AspNetCore" Version = "2.5.0" />
<!--<PackageReference Include = "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version = "2.0.0" PrivateAssets = "All" />-->
</ItemGroup>
Это просто обычные классы, включенные в Views.dll
. Вы можете показать, что находится в dll, с помощью таких инструментов, как dotPeek @ Örvar
Из руководства Переход с ASP.NET Core 1.x на 2.0 вам нужно будет установить для MvcRazorCompileOnPublish
значение false.
Я перешел с 2.0 на 2.1. Тем не менее, этот вариант предназначен / был для публикации. Меня беспокоит отладка.
Кажется, вы отклонили ответ, даже не попробовав его. Если вы удалите Conversiolt.Conmania.Views.dll и добавите этот флаг, будет ли он воссоздан в папке отладки?
Это обычно отключает его. Как тогда включить его при публикации?
Взгляните на Пакет SDK для Razor ASP.NET Core для некоторых опций.
Вы должны установить для MvcRazorCompileOnPublish значение false, при этом он отключит все функции компиляции представления, которые включены как часть публикации.
<PropertyGroup>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
Я думаю, что сейчас нет хорошего способа сделать это, вам нужно найти обходной путь здесь. См. github.com/aspnet/MvcPrecompilation/issues/39.
Вы можете играть со свойством проекта MvcRazorFilesToCompile
MvcRazorFilesToCompile: item group that specifies view files to compile. By default this includes all .cshtml files marked as content.
Примечание: не используйте пустую строку, так как она такая же, как по умолчанию (из репо):
<ItemGroup Condition = "'@(MvcRazorFilesToCompile)' == ''">
<MvcRazorFilesToCompile Include = "@(Content)" Condition = "'%(Extension)'=='.cshtml'" />
</ItemGroup>
Microsoft создала пакет Nuget. Это задокументировано здесь.
Просто укажите Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
в вашем файле .csproj условно. Не забудьте настроить версию, которой вы действительно пользуетесь.
<PackageReference
Include = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
Version = "3.1.0"
Condition = "'$(Configuration)' == 'Debug'" />
Также настройте свои услуги
public void ConfigureServices(IServiceCollection services)
{
// your MVC Builder (AddRazorPages/AddControllersWithViews)
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
// Only use Runtime Compilation on Debug
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
Конечно, когда вы хотите использовать Runtime Compilation в целом, даже после публикации, вам не нужны все условия.
Это можно сделать с помощью свойства RazorCompileOnBuild
в файле .csproj:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
Таким образом, файлы Razor предварительно компилируются только во время публикации.
В зависимости от варианта использования вы также хотите настроить это в зависимости от конфигурации сборки:
<PropertyGroup Condition = "'$(Configuration)' == 'Debug'">
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
Использование этого параметра в режиме отладки довольно круто, поскольку время для первого рендеринга остается примерно таким же, а F5 в браузере для обновления после изменения cshtml НАМНОГО быстрее. Но при таком подходе к настройке F1 в VS 2017 больше не вызывает обновления моих связанных браузеров, вместо этого VS выводит диалоговое окно, в котором говорится: «Вы хотите остановить отладку. Как-то странно. Есть мысли?
Для .Net Core 3.x вам необходимо установить расширение NuGet из MS docs.microsoft.com/en-us/aspnet/core/mvc/views/… - обратите внимание, что свойство «ENV» необходимо добавить в конструктор запуска в качестве параметра DI (согласно комментарию внизу страницы)
Большое спасибо, я использую asp.net core 2.1, и ваше решение для .net core> = 2.1 && <3 работает.
@Christian - Я добавил Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
в свой проект ASP.NET MVC Core 3 и добавил services.AddRazorPages().AddRazorRuntimeCompilation();
в Startup. Должен ли я видеть свои файлы .cshtml непосредственно на сервере при публикации? Я пытаюсь включить сценарий, в котором люди html / css могут работать со мной без необходимости иметь среду Microsoft.
@Howiecamp Отвечает ли это на ваш вопрос?
RazorCompileOnBuild = false не работает на ядре aspnet 5.0, пожалуйста, помогите
Вы пробовали версию> 3? @ahdung
@ChristianGollhardt Я использую .NET 5 после перехода на core3.1, такая же проблема. Папки Pages
нет в bin / debug.
Если у вас возникнет новый вопрос, задайте его. Этот вопрос не о публикации @ahdung
Если вы используете КонтроллерыWithViews на .net ядро 3.1 или .net ядро 5.0, вы можете посмотреть следующее решение:
Привет, мне было интересно, знаете ли вы, где хранятся скомпилированные представления? Заранее спасибо.