.NET Core 3.0 - Preview 2 - Razor view не перекомпилируется автоматически при изменении

Согласно https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0 по умолчанию бритвенные представления должны перекомпилироваться при изменении локальных сред для asp.net core 3.0,

Тем не менее, мой проект не делает это локально. Если я меняю представление и обновляюсь при локальной отладке, это изменение не отражается. Я должен остановить решение, перезапустить, а затем увидеть изменения.

Я делаю это на стандартном шаблоне ASP.NET Core Web Application в Visual Studio 2019 с asp.net core 3.0.0 preview 2, используя бритвенные страницы. Любая идея, если мне нужно изменить настройки, чтобы включить эту функцию?

1 ответ

Решение

ОК, похоже, он еще не поддерживается:(

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

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

Приложения, требующие компиляции во время выполнения или повторной компиляции файлов Razor, должны:

  • Добавить ссылку на Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation пакет. Он будет доступен как часть версии 3.0.0-preview3.
  • Обновите приложение ConfigureServices включить звонок в AddMvcRazorRuntimeCompilation:

Для версии выпуска 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
    }

Вернуть компиляцию представления во время выполнения ASP.NET Core 3

  1. Ссылка Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Вызов services.AddMvc().AddRazorRuntimeCompilation()
  3. Удалить Microsoft.VisualStudio.Web.CodeGeneration.Design если есть несоответствие версии на Microsoft.CodeAnalysis.Common пакет

Компиляция времени выполнения включается с помощью 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

Чтобы вернуть компиляцию представлений Razor во время выполнения в ASP.NET Core 3.1:

  1. Установите Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation Пакет NuGet.
  2. Обновите проект Startup.ConfigureServices метод для включения вызова AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    Компиляция файлов Razor в ASP.NET Core 3.1

Шаг 1. Установите указанный ниже пакет из диспетчера пакетов NuGet для решения.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Шаг 2. Добавьте приведенный ниже код в ConfigureServices файла Startup.cs.

services.AddControllersWithViews().AddRazorRuntimeCompilation();

Сохраните страницу, а затем обновите браузер клиента.

Если вы используете Razor, добавьте код для services.AddRazorPages().AddRazorRuntimeCompilation();

В.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();
    

После этого опубликуйте еще раз и запустите. Это будет работать.

Самый простой способ настроить компиляцию среды выполнения только для локальной разработки - обновить профили запуска в launchSettings.json. Этот метод не требует изменения кода для настройки проекта, который выполняется локально (это не повлияет на вашу продукцию).

См. Официальную документацию:

  1. Установите пакет NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
  2. Измените раздел "Параметры среды запуска" в файле 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"
      }
    }
  }
}

Просто добавленное примечание - вы можете только условно включить эту компиляцию среды выполнения, чтобы опубликованный вывод:

  • Использует скомпилированные просмотры.
  • Меньше по размеру.
  • Не включает файловые наблюдатели в производственной среде.

Условно включить компиляцию среды выполнения

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