.NET Core 3.0 : Razor 뷰는 변경시 자동으로 다시 컴파일되지 않습니다.


94

설명서 에 따르면 Razor 뷰는 기본적으로 ASP.NET Core 3.0의 로컬 환경에서 변경시 다시 컴파일해야합니다.

그러나 내 프로젝트는 이것을 로컬에서 수행하지 않습니다. 로컬에서 디버깅 할 때보기를 변경하고 새로 고치면 변경 사항이 반영되지 않습니다. 솔루션을 중지하고 다시 실행 한 다음 변경 사항을 확인해야합니다.

Razor 페이지를 사용하여 ASP.NET Core 3.0.0 Preview 2를 사용하는 Visual Studio 2019의 기본 ASP.NET Core 웹 애플리케이션 템플릿에서이 작업을 수행하고 있습니다. 이 기능을 활성화하기 위해 설정을 변경해야하는지 아십니까?

3.0 전체 릴리스를 위해 2019 년 11 월 업데이트 :

이 질문은 여전히 ​​많은 견해를 얻고 있습니다. 추가하기 위해 몇 가지 답변이 인용되었습니다.

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

당신에 ConfigureServices()함수 Startup.cs, 가산 후 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet 패키지를. 제 경우에는 Razor Pages 만 사용하고 있으므로 AddControllersWithViews(). 대신 이것은 나를 위해 일했습니다.

services.AddRazorPages().AddRazorRuntimeCompilation();

.cshtml 면도기 뷰는 다시 컴파일됩니다. 다시 확인할 수 있습니까? <h1> 테스트 </ h1>를 추가해보세요. 앱을 시작하고 페이지를로드합니다. "테스트"가 표시되어야합니다. 그런 다음 <h1> Foo </ h1>로 변경합니다. "Foo"가 표시되어야합니다.
John-Luke Laue

작동하지 않습니다! 솔루션을 중지하고 시작해야합니다. 여기에서 캡처 : drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/…- 재고 Razor Pages 템플릿을 사용하여 여러 컴퓨터에서 사용해 보았습니다.
tarun713

Mac 또는 PC 또는 Linux에서 실행 중입니까? 또한 미리보기에 문제가있을 수 있습니다. asp.net core 2.x를 사용해 볼 수 있습니까?
John-Luke Laue

PC, Visual Studio 2019 미리보기. 2.2로 시도했는데 작동합니다! 그래서 3.0에서 변경된 것이 있습니다.
tarun713

나는 완전히 업데이트 된 .net 코어 3 / VS를 사용 중이며 .AddRazorRuntimeCompilation();감사합니다!
duckwizzle 1911

답변:


60

알겠습니다. 아직 지원되지 않는 것 같습니다.

런타임 컴파일이 제거됨 Roslyn에 의존하지 않도록 ASP.NET Core 공유 프레임 워크를 정리 한 결과 페이지 및보기의 런타임 컴파일에 대한 지원도이 미리보기 릴리스에서 제거되었습니다. 대신 페이지 및보기의 컴파일이 빌드시 수행됩니다. 향후 미리보기 업데이트에서는 앱에서 런타임 컴파일 지원을 선택적으로 활성화하기위한 NuGet 패키지를 제공 할 것입니다.

https://github.com/aspnet/Announcements/issues/343 에서 문제에 대한 자세한 내용을 읽을 수 있습니다.

런타임 컴파일 또는 Razor 파일 재 컴파일이 필요한 애플리케이션은 다음을 수행해야합니다.

  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation패키지에 대한 참조를 추가하십시오 . 3.0.0-preview3 릴리스의 일부로 사용할 수 있습니다 .
  • ConfigureServices대한 호출을 포함 하도록 애플리케이션을 업데이트합니다 AddMvcRazorRuntimeCompilation.

11
AddMvcRazorRuntimeCompilation이다 AddRazorRuntimeCompilationASP.Net 코어 3.0 미리보기 4
DB 프레드

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
    }

.Net 코어 버전과 관련된 Nuget 패키지 버전에 대한 팁입니다. .Net Core 3.0을 사용하는 경우이 Nuget 패키지의 이후 버전을 선택할 수 없습니다. 그러나 Nuget lib의 버전 3.0.0은 .Net Core 3.0에서 작동합니다. .Net Core 3.1을 사용하는 경우 최신 버전을 선택할 수 있습니다.
Tore Aurstad

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

자산이 프로덕션에 배치되는 것을 방지하는 방법이 있습니까? PackageReference에서 PrivateAssets 조합을 시도했지만 작동하지 않는 것 같습니다.
Chet

Core 2.2에서는 면도기 옵션에 FileProviders가 있으며 재 컴파일 없이도 작동합니다. cshtml과 voila를 편집하십시오. 코어 3에서는이 속성이 제거되었습니다. :( github.com/aspnet/AspNetCore/issues/14572
dariol

1
Microsoft.VisualStudio.Web.CodeGeneration.Design 패키지를 제거하는 것이 다른 곳에서는 언급하지 않는 비밀 소스이기 때문에 +1했습니다.
tkburbidge

@tkburbidge 방금 패키지 문제도 만났습니다. 이상하게도 나는 정확히 똑같은 두 줄을 연속적으로 사용했습니다. 둘 다 제거하고 컴파일 할 수 있습니다. 더 이상하게도 나는 라인을 다시 제자리에 놓고 여전히 컴파일 할 수 있었다.
Lynn Crumbling

26

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation패키지를 사용하여 런타임 컴파일이 활성화 됩니다. 런타임 컴파일을 사용하려면 앱이 다음을 수행해야합니다.

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet 패키지를 설치합니다 .

  2. Startup.ConfigureServices대한 호출을 포함 하도록 프로젝트의 메서드를 업데이트합니다 AddRazorRuntimeCompilation.

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

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


13

ASP.NET Core 3.1에서 런타임 Razor보기 컴파일을 다시 가져 오려면 :

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet 패키지를 설치합니다 .
  2. Startup.ConfigureServices대한 호출을 포함 하도록 프로젝트의 메서드를 업데이트합니다 AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    ASP.NET Core 3.1의 Razor 파일 컴파일


11

1 단계 : 솔루션 용 NuGet 패키지 관리자에서 아래 패키지를 설치합니다.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

2 단계 : Startup.cs 파일의 ConfigureServices에 아래 코드 추가

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. launchSettings.json에서 시작 프로필 environmentVariables 섹션을 수정합니다.
    • 확인 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"
      }
    }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.