변경 후 .NET Core MVC 페이지가 새로 고쳐지지 않음


111

최신 버전 2.2에서 .NET Core MVC를 빌드하고 있습니다. CSHTML 파일을 변경하고 페이지를 새로 고칠 때 문제가 있습니다. 변경 사항이 브라우저에 반영되지 않습니다. 변경 사항을 확인하려면 프로젝트를 다시 시작해야합니다. 이것은 한동안 일어나고 있으므로 어떤 변경으로 인해이 문제가 발생했는지 정확히 모르겠습니다.

나는 크롬의 "Empty Cache and Hard Reload"와 다른 브라우저를 사용해 보았습니다. 이것은 Mac 용 Visual Studio와 VS Code를 모두 사용하는 Windows 및 Mac에서 발생합니다.

기본 .Net Core 프로젝트에서는 제대로 작동하므로 내 프로젝트에서 변경된 내용이어야합니다. 이 문제를 디버깅하려면 어디서부터 시작해야하는지 궁금합니다. 내 거의 모든 주석 해봤 Startup.csProgram.cs어떤 해상도를.


아래에 언급 한 것과 동일한 MissingMethodException이 발생합니다. 알아 낸 적이 있습니까? 그렇다면 질문에 답해 주시겠습니까?
JohnOsborne

답변:


59

ASP.NET Core 2.2에서 변경된 사항이있는 것 같습니다 (이 변경 사항에 대한 공지를 찾을 수 없습니다). '개발'환경에서 명시 적으로 실행하지 않는 경우 Razor 뷰가 컴파일되고 .cshtml에 대한 변경 사항이 표시되지 않습니다.

그러나 다음과 같이 Startup 클래스의 일부 구성을 사용하여이 기능을 끌 수 있습니다.

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

ASP.NET Core 3.0 이상에 대해서는 Alexander Christov의 답변을 참조하십시오 .


1
감사합니다. 그러나이 기능을 사용하도록 설정하고 html을 변경 한 다음 새로 고치면 다음과 같은 예외가 발생합니다. MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() 이 예외가 무엇을 의미하는지 아십니까? 다른 모든 페이지는 정상적으로로드됩니다. 내가 파일을 편집 할 새로 고침 경우에만이 오류가 얻을
kevskree

3
이것은 나를 위해 일했습니다. 환경에 따라 설정하려면 IHostingEnvironment를 Startup 메서드에 추가하고 속성에 유지합니다. 다음과 같이 사용services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious

1
감사합니다. 그러나 마이크로 소프트가 이와 같은 큰 변화를 공식적으로 발표하지 않는다는 것은 꽤 어색하고 어리석은 일이라고 생각합니다.
Code_Worm

@kevskree 같은 일이 나에게 무슨 일이 일어나고
JohnOsborne

1
@Mayank Gupta : 아래 Alexander Christov의 대답을 참조하십시오 ( stackoverflow.com/a/57637903/198990 ). 그의 대답은 나를 위해 일했습니다 (3.1).
Sandor Drieënhuizen

202

에서 ASP.NET 코어 3.0 이상 , RazorViewEngineOptions.AllowRecompilingViewsOnFileChange사용할 수 없습니다.

앱이 실행되는 동안보기를 새로 고침해도 작동하지 않는다는 사실에 놀랐습니다. 다음 솔루션을 발견했습니다.

  1. 프로젝트에 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 패키지 추가
  2. 에 다음을 추가하십시오 Startup.cs.

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

호기심에 대한 전체 설명 은 다음과 같습니다 .

HTH


1
이것은 어떤 이유로 든 나를 위해 작동하지 않았습니다. 차이가 있다면 저는 Mac에 있습니다.
Nakul Tiruviluamala

@Nakul 사용하는 .net 코어 버전은 무엇입니까?
Alexander Christov

2.1.13과 3.0.0 :이 명령을 사용하는 경우 : LS를 /usr/local/share/dotnet/shared/Microsoft.NETCore.App/ 나는 겉으로는 두 개의 답 있어요
나쿨 Tiruviluamala을

7
이것은 Mac 및 ASP.NET Core 3.1에서 나를 위해 잘 작동했습니다.
user3071284

4
이 힌트에 대한 Thx; .Net Core 3.1.2에서 나를 위해 일했습니다
jawa

49

방금 최신 ASP.NET MVC Core 3.1 템플릿을 사용하여 새 프로젝트를 만들었고 디버그에 대해 런타임 재 컴파일을 활성화하기 위해 다음을 변경했습니다.

참조 NuGet 패키지 -Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs-ConfigureServices (IServiceCollection 서비스) WAS :

// stuff...

services.AddControllersWithViews();

// more stuff...

지금:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
이것은 읽을만한 가치가있는 Alex가 게시 한 기사를 읽지 않고 가장 좋은 답변입니다.
Waragi

9

다음을 추가해야합니다.

services.AddControllersWithViews();

받는 ConfigureService의 방법.

아래 코드는 ASP.NET Core 3.1에서 사용할 수 없습니다.

services.AddControllersWithViews().AddRazorRuntimeCompilation();

6
작동하려면 nuget 패키지를 설치해야합니다. Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

4

아래는 뷰가 별도의 프로젝트에있을 때 도움이되었습니다.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}

이것은 Razor 클래스 라이브러리로 작업 할 때 저에게 도움이 된 유일한 답변입니다. 건배!
Sipke Schoorstra


1

Rider에서 ASPNETCORE_ENVIRONMENT=Development환경 변수 를 추가하여이 문제를 해결할 수있었습니다 .



0

이 문제를 해결하는 방법에는 두 가지가 있습니다.

1 . .sln 파일이있는 폴더의 권한을 확인하십시오. IIS Express 서버가 실행 중일 때 Visual Studio가 파일에 액세스하지 못할 수 있으므로 파일 액세스 권한에 문제가있을 수 있으므로 필요할 때마다 새로운 .cshtml 변경 사항을 반영합니다. 서버를 다시 시작하면 다음과 같이 폴더 액세스 권한을 편집하는 것이 좋습니다.

폴더-> 속성-> 보안-> 편집 버튼 클릭-> 모든 옵션 확인-> 저장을 마우스 오른쪽 버튼으로 클릭하십시오 .

Visual Studio를 다시 시작하여 변경 사항을 확인합니다.

이것이 작동하지 않으면 2 옵션을 사용하십시오.

2. startup.cs 파일 의 프로젝트에서 다음 줄 을 메서드에 ConfigureServices () 추가하십시오 .

services.AddMvc (). AddRazorOptions (options => options.AllowRecompilingViewsOnFileChange = true);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.