.NET Core 3.0: подання Razor не перекомпілюються автоматично при зміні


94

Згідно з документацією , подання Razor за замовчуванням повинні перекомпілювати зміни в локальних середовищах для ASP.NET Core 3.0.

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

Я роблю це на шаблоні веб-програми ASP.NET Core за замовчуванням у Visual Studio 2019 з ASP.NET Core 3.0.0 Preview 2 за допомогою сторінок Razor. Будь-яка ідея, якщо мені потрібно змінити налаштування, щоб увімкнути цю функцію?

ОНОВИТИ ЛИСТОПОЛЬ 2019 ДЛЯ 3.0 ПОВНИЙ ВИПУСК:

Це питання все ще отримує багато переглядів. Додано кілька відповідей

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

До вашої ConfigureServices()функції Startup.csпісля додавання Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationпакета NuGet. У моєму випадку я використовую лише Razor Pages, тому я не телефоную AddControllersWithViews(). Натомість це працювало у мене:

services.AddRazorPages().AddRazorRuntimeCompilation();

.cshtml подання бритви перекомпілюються. Чи можете ви ще раз перевірити? Спробуйте додати <h1> Тест </h1>. Запустіть програму, завантажте сторінку. ви повинні побачити "Тест". Потім змініть це значення на <h1> Foo </h1>. Ви повинні побачити "Фу".
Джон-Лука Лауе

Не працює! Я повинен зупинитися і розпочати рішення. Захопив тут: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - Спробував на декількох машинах із шаблоном "Сторінки бритви".
tarun713

Ви працюєте на Mac, ПК або Linux? Крім того, це може бути проблемою з попереднім переглядом. Чи можете ви спробувати використовувати asp.net core 2.x?
Джон-Лука Лауе

ПК, попередній перегляд Visual Studio 2019. Я спробував з 2.2, і це працює! Отже, є щось, що змінилося в 3.0.
tarun713

Я перебуваю на повністю оновленому .net core 3 / VS і мені довелося додати .AddRazorRuntimeCompilation();спасибі!
duckwizzle

Відповіді:


60

Гаразд, схоже, це ще не підтримується :(

Видалено компіляцію середовища виконання Як наслідок очищення спільної платформи ASP.NET Core, яка не залежала від Roslyn, підтримка компіляції сторінок та подань середовища виконання також була видалена в цьому попередньому випуску. Натомість компіляція сторінок та переглядів виконується під час побудови. У майбутньому оновленні попереднього перегляду ми надамо пакети NuGet для додаткового включення підтримки компіляції середовища виконання в додатку.

Ви можете прочитати більше про проблему тут https://github.com/aspnet/Announcements/issues/343

Програми, які вимагають компіляції або повторної компіляції файлів Razor, повинні:

  • Додайте посилання на Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationпакет. Він буде доступний у рамках випуску 3.0.0-preview3 .
  • Оновіть програму, ConfigureServicesщоб включити дзвінок AddMvcRazorRuntimeCompilation:

11
AddMvcRazorRuntimeCompilationє AddRazorRuntimeCompilationз ASP.Net Core 3.0 Preview 4
DB Fred

56

Для версії 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
    }

Порада щодо версій пакета nuget, пов’язаних із основною версією .Net. Якщо ви використовуєте .Net Core 3.0, ви не можете вибрати пізніші версії цього пакета Nuget. Але версія 3.0.0 бібліотеки Nuget працює з .Net Core 3.0. Якщо ви використовуєте .Net Core 3.1, ви можете вибрати новіші версії.
Торе Аурстад,

36

Щоб повернути компіляцію подання середовища виконання в ASP.NET Core3

  1. Довідково Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Телефонуйте services.AddMvc().AddRazorRuntimeCompilation()
  3. Видаліть, Microsoft.VisualStudio.Web.CodeGeneration.Designякщо на Microsoft.CodeAnalysis.Commonпакунку є невідповідність версії

2
Лише підказка для інших: під час використання Nuget поставте галочку / встановіть прапорець "до випуску".
GeoffM

Чи є спосіб запобігти розміщенню активів на виробництві? Я спробував деякі комбінації PrivateAssets на PackageReference, але, здається, це не працює.
Чет

В опціях бритви Core 2.2 є FileProviders, і вона працює навіть без перекомпіляції. Просто відредагуйте cshtml і voila. У ядрі 3 це властивість видалено. :( github.com/aspnet/AspNetCore/issues/14572
dariol

1
+1, оскільки видалення пакета Microsoft.VisualStudio.Web.CodeGeneration.Design було секретним соусом, про який більше ніде не згадується.
tkburbidge

@tkburbidge Я теж зіткнувся з цим питанням із пакетом. Як не дивно, але я мав два рядки, які були абсолютно однаковими, спиною до спини. Я видалив обидва, і міг скомпілювати. Що ще дивніше , тоді я повернув рядки на місце і все ще зміг скомпілювати.
Лінн Рушиться

26

Компіляція середовища виконання увімкнена за допомогою Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationпакету. Щоб увімкнути компіляцію середовища виконання, програми повинні:

  1. Встановіть Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationпакет NuGet.

  2. Оновіть Startup.ConfigureServicesметод проекту, включивши виклик до AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0



11

Крок 1: Встановіть наведений нижче пакет із NuGet Package Manager for Solution.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Крок 2: Додайте наведений нижче код у файл ConfigureServices файлу Startup.cs

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Збережіть сторінку, а потім оновіть браузер клієнта.

Якщо ви використовуєте Razor, додайте код для services.AddRazorPages (). AddRazorRuntimeCompilation ();


6

Тільки додана примітка - можливо, ви хочете лише умовно увімкнути цю компіляцію середовища виконання, щоб опубліковані результати:

  • Використовує складені погляди.
  • Менший за розміром.
  • Не вмикає переглядачі файлів у виробництві

Умовно увімкніть компіляцію середовища виконання


5

У .NET Core 3.1 потрібно вимкнути генерацію views.dllфайлу.

  1. Додайте наведений нижче код у свій .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>
    
  2. Встановіть наведений нижче пакет із диспетчера пакунків NuGet для рішення.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Додайте наведений нижче код до ConfigureServicesметоду вашого Startup.csфайлу:

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Або

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Або

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Після цього опублікуйте ще раз і запустіть його. Це спрацює.


0

Найпростіший спосіб налаштування компіляції середовища виконання лише для місцевого розвитку - це оновлення профілів запуску в launchSettings.json. Цей метод не вимагає змін коду для налаштування локального проекту (це не вплине на ваше виробництво).

Дивіться офіційну документацію :

  1. Встановіть пакет Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet.
  2. Змініть розділ профілю запуску EnvironmentVariables у launchSettings.json:
    • Перевірка ASPNETCORE_ENVIRONMENTвстановлена ​​на "Розробка".
    • Встановіть ASPNETCORE_HOSTINGSTARTUPASSEMBLIES"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Приклад:

{
  "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"
      }
    }
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.