ASP.NET MVC에서 뷰 컴파일


558

msbuild 작업이 뷰를 컴파일하기를 원하므로 컴파일 시간 오류가 있는지 확인할 수 있습니다 ... 컴파일 시간. 어떤 아이디어?


1
사용중인 viewengine을 모르지만 Razor를 사용하는 경우 내 블로그 게시물을 확인하고 싶을 수도 있습니다. <a href = " chrisvandesteeg.nl/2010/11/22/… your asp.net mvc Razor는 별도의 dll로보기 </a> 다른 뷰 엔진에도 해당 코드를 사용할 수 있어야하지만 아직 테스트하지 않았 음
Chris van de Steeg

답변:


154

솔직히 RazorGenerator nuget 패키지를 추천합니다 . 이렇게하면 뷰 .designer.cs를 저장할 때 생성 된 파일이 생성되고 뷰에 대한 컴파일 시간 오류가 발생하는 것 외에도 어셈블리로 사전 컴파일되어 (= 빠른 예열) Resharper가 추가 도움을 제공합니다.

이를 사용하려면 ASP.NET MVC 프로젝트에 RazorGenerator nuget 패키지를 포함시키고 Tools (도구) → Extensions and Updates (도구 → 확장 및 업데이트) 항목 아래에 " Razor Generator "확장을 설치하십시오 .

우리는 이것을 사용 하며이 접근법으로 컴파일 당 오버 헤드는 훨씬 적습니다. 이 외에도 RedGate의 .NET Demon을 추천 하여 컴파일 시간 영향을 크게 줄입니다.

도움이 되었기를 바랍니다.


1
VS2012와 비슷한 솔루션이 있습니까?
다니엘

6
불행히도 C # 만 지원하고 VB.Net은 지원하지 않습니다
Ed DeGagne

3
@zoidbergi RazorGenerator는 VS2012와 함께 작동합니다. RazorGenerator.Mvc 및 RazorGenerator.MsBuild를 사용할 때 : 확장이 필요하지 않습니다. stacktoheap.com의
Jeroen K

2
이것은 오류를 찾는 데만 사용할 수 있습니까? 아니면 응용 프로그램을 배포 할 때 뷰 엔진을 대체합니까?
niico

RazorGenerator nuget 패키지와 Razor Generator 확장을 설치했습니다. 내 프로젝트에서 변경된 것이 없습니다. .designer.cs 파일이 나타나지 않았습니다. 난 비주얼 스튜디오 2017를 사용
마이클 Samteladze에게

563

RC1에 대한 readme 단어 doc에서 (Google이 색인화하지 않음)

ASP.NET 컴파일러 빌드 후 단계

현재,보기 파일 내의 오류는 런타임까지 감지되지 않습니다. 컴파일시 이러한 오류를 감지 할 수 있도록 ASP.NET MVC 프로젝트에는 MvcBuildViews 속성이 포함되어 있으며이 속성은 기본적으로 비활성화되어 있습니다. 이 속성을 활성화하려면 다음 예제와 같이 프로젝트 파일을 열고 MvcBuildViews 속성을 true로 설정하십시오.

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MvcBuildViews>true</MvcBuildViews>
  </PropertyGroup>

참고이 기능을 사용하면 빌드 시간에 약간의 오버 헤드가 추가됩니다.

다음 단계를 수행하여 MVC의 이전 릴리스로 작성된 프로젝트를 업데이트하여 뷰의 빌드 시간 유효성 검증을 포함 할 수 있습니다.

  1. 텍스트 편집기에서 프로젝트 파일을여십시오.
  2. 최상위 요소 아래에 다음 요소를 추가하십시오 <PropertyGroup>. <MvcBuildViews>true</MvcBuildViews>
  3. 프로젝트 파일의 끝에서 <Target Name="AfterBuild">요소를 주석 해제 하고 다음과 일치하도록 수정하십시오.
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
프로젝트에서 작동하지 않으면 프로젝트 파일에 <MvcBuildViews> false </ MvcBuildViews>가 없는지 확인하십시오. 내가 추가 한 새로운 <MvcBuildViews> 요소를 재정의하고있었습니다.
Adrian Grigore

3
@mxmissile : Scott Guthrie는 웹 응용 프로그램 프로젝트에서 이러한 종류의 지원을 얻기 위해 웹 배포 프로젝트를 솔루션에 추가 할 것을 권장했습니다. weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph-Ben Duguid

6
EnableUpdateable이 false로 설정되어 있는지 확인하십시오. 그렇지 않으면 뷰가 사전 컴파일되지 않습니다. <EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg

55
왜, 왜, 왜 ... 뷰가 있거나없는 건물을위한 키보드 단축키가 없습니까? MS 왜?
dariol

2
이것이 MVC 도구에 추가 된 솔루션입니다. stackoverflow.com/a/2670792/878612
lko

50

이를 위해 aspnet_compiler 를 사용할 수 있습니다 .

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:\Path\To\Your\WebProject -f -errorstack C:\Where\To\Put\Compiled\Site

여기서 " / Virtual / Application / Path / Or / Path / In / IIS / Metabase "는 " / MyApp "또는 " / lm / w3svc2 / 1 / root / "와 같습니다.

또한 MSDN 에는 AspNetCompiler Task 가 있으며 aspnet_compiler를 MSBuild와 통합하는 방법을 보여줍니다.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
        />
    </Target>
</Project>

5
최신 정보가 아닙니다. 아래 읽어보기 문서에서 발췌 한 내용을 참조하십시오.
JarrettV

1
다른 대답은 자세히 프로젝트 작업을 설명하지만, aspnet_compiler 부분은 여전히 올바른 (그리고 빌드 에이전트에 유용)입니다.
mlhDev

26

또한 Resharper를 사용하면 솔루션 전체 분석을 활성화 할 수 있으며 aspx 파일에있을 수있는 컴파일러 오류를 감지합니다. 그것이 우리가하는 일입니다 ...


4
aspx 파일에서는 작동하지만 솔루션 전체 분석에는 ascx 파일 (사용자 컨트롤)이 포함되어 있지 않습니다.
mookid8000

3
나는 R # 5에서 그렇다고 생각하지만 큰 프로젝트 (16GB 가정용 컴퓨터에서도 사용하지 않아도 됨)를위한 거대한 리소스 호그입니다.
Andrew

3
@Andrew / @ mookid8000-R #은 누락되거나 잘못된보기 및 동작과 같이 컴파일러에서 발생하지 않는 오류도 포착합니다. R #은 PC 속도를 조금 느리게합니다 (4GB 램과 하이퍼 스레드 CPU가있는 큰 프로젝트에서는 괜찮습니다). 기다리는 데 드는 시간을 쉽게 되돌릴 수 있습니다. R # as code는 동일한 작업을 수동으로 수행하기 위해 취해야 할 많은 단계를 함께 묶는 고급 작업을 제공합니다. 당신의 프로젝트는 거대해야합니다!
Drew Noakes

5
대규모 프로젝트의 경우 "PC 속도를 조금 낮추십시오"는 과소 평가입니다. 내 빌드 머신에는 16GB의 RAM과 8 개의 코어 (2 개의 Xeon)가 있으며 CRAWLS 만 있습니다. 나는 R #이 우리의 규모의 프로젝트를 위해 만들어지지 않았다고 생각합니다 ... 예 : 우리 솔루션에는 ~ 30 개의 프로젝트, 몇 백만 LOC 및 수백 가지의 견해가 있습니다. 소규모 프로젝트 (예 : 프로젝트 수는 50 회 이하)에서는 R #을 좋아하지만, 큰 프로젝트에서는 항상 해제해야합니다.
Beep beep

1
이것은 작동 할 수 있지만 도망 가십시오! 나는 내 솔루션이 작다는 생각으로 이것을 켜고 결코 '분석'을 끝내지 않고 모든 RAM과 CPU를 먹었습니다. 회복하는데 15 분이 걸렸습니다.
emragins

11

다음 릴리스의 ASP.NET MVC (1 월 정도에 사용 가능)에는 뷰를 컴파일하는 MSBuild 작업이 있어야하므로 기다릴 수 있습니다.

공지 사항 보기


6

여기에 주어진 대답은 일부 MVC 버전에서는 작동하지만 다른 MVC 버전에서는 작동하지 않습니다.

간단한 솔루션은 MVC1에서 작동했지만 MVC2로 업그레이드 할 때 더 이상 뷰가 컴파일되지 않았습니다. 이것은 웹 사이트 프로젝트 파일의 버그로 인한 것입니다. 이 Haacked 기사를 참조하십시오.

이것을 참조하십시오 : http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx


6

빌드> 코드 분석 실행

핫키 : Alt+F11

면도기 오류를 포착하는 데 도움이되었습니다.


2
핫키가 실제로 Razor 오류를 표시했기 때문에이 답변을 찬성했습니다. 그러나 나중에 IDE에서 .cshtml 파일이 열려있는 경우에만 작동하는 것으로 나타났습니다.
Michael12345

1

Visual Studio의 Productivity Power Tools ( 무료 ) 확장 을 사용하면 약간 도움이됩니다 . 특히, Solution Error Visualizer기능입니다. 이를 통해 솔루션 탐색기 (오류가 발견 된 소스 파일)에 컴파일 오류가 시각적으로 표시됩니다. 그러나 어떤 이유로 든이 기능은 코드의 다른 곳에서 다른 오류와 같이 작동하지 않습니다.

MVC보기를 사용하면 컴파일 타임 오류가 여전히 해당 .cs 파일에서 빨간색으로 밑줄이 표시되지만 솔루션 탐색기에서 이러한 오류가 위쪽으로 전파되지는 않습니다 (포함 소스 파일이 아니더라도).

BlueClouds이전 진술을 수정 해 주셔서 감사 합니다.

방금 확장 프로그램의 github 프로젝트 에서이 문제 를 보고했습니다 .


1
Productivity Power Tools를 사용해 보았습니다. 그러나 여기서 말하는 것과 같이 행동하지 않습니다. 면도기보기에 오류가 있지만 빌드는 성공합니다. 보기는 솔루션 탐색기 트리에서 빨간색으로 표시되거나 밑줄이 표시되지 않습니다.
Blue Clouds

2
@BlueClouds : 맞습니다. 샘플 프로젝트를 만들고 뷰에 컴파일 타임 오류를 추가했습니다. 확장은 오류가있는 줄에 빨간색으로 밑줄을 표시하지만 솔루션 탐색기에서 오류를 전파하지는 않습니다. 답변에 명시된 내용을 수정하고 있습니다. 실제로 문제를 효과적으로 해결하지는 않지만 여전히 도움이되므로 여기에 답을 남겨 두십시오.
Veverke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.