Kompiluj widoki w ASP.NET MVC


558

Chcę, aby zadanie msbuild skompilowało widoki, dzięki czemu mogę sprawdzić, czy w czasie kompilacji wystąpiły błędy czasu kompilacji. Jakieś pomysły?


1
Nie wiem, jakiego używasz viewengine, ale jeśli używasz Razor, możesz sprawdzić mój post na blogu: <a href = " chrisvandesteeg.nl/2010/11/22/... your asp.net mvc Razor przegląda osobną bibliotekę DLL </a> Powinno być możliwe użycie tego kodu również w innych przeglądarkach, ale jeszcze tego nie zrobiłem i nie przetestowałem
Chris van de Steeg

Odpowiedzi:


154

Szczerze polecam pakiet nuget RazorGenerator . W ten sposób w twoich widokach .designer.csgenerowany jest plik, gdy je zapisujesz, a oprócz błędów kompilacji dla twoich widoków, są one również wstępnie kompilowane w zestawie (= szybsze rozgrzewanie), a Resharper zapewnia również dodatkową pomoc.

Aby tego użyć, dołącz pakiet nuget RazorGenerator do swojego projektu ASP.NET MVC i zainstaluj rozszerzenie „ Razor Generator ” w pozycji Narzędzia → Rozszerzenia i aktualizacje .

Używamy tego, a narzut przy kompilacji przy takim podejściu jest znacznie mniejszy. Ponadto prawdopodobnie poleciłbym .NET Demon firmy RedGate, który znacznie zmniejsza wpływ czasu kompilacji.

Mam nadzieję że to pomoże.


1
czy istnieje podobne rozwiązanie dla VS2012?
Daniel

6
Niestety, obsługuje on tylko C # i brak VB.Net
Ed DeGagne

3
@zoidbergi RazorGenerator współpracuje z VS2012; podczas korzystania z RazorGenerator.Mvc i RazorGenerator.MsBuild: nie ma potrzeby rozszerzenia. Zobacz wpis na blogu na stacktoheap.com
Jeroen K

2
Czy można tego użyć tylko do wyszukiwania błędów - czy zastępuje silnik widoku podczas wdrażania aplikacji?
niico

Zainstalowałem pakiet nuget RazorGenerator i rozszerzenie Razor Generator. W moim projekcie nic się nie zmieniło. Nie pojawiły się żadne pliki .designer.cs. Używam studio wizualnego 2017.
Michael Samteladze,

563

Z słowa readme doc dla RC1 (nieindeksowane przez Google)

Kompilator ASP.NET po kompilacji

Obecnie błędy w pliku widoku nie są wykrywane do czasu uruchomienia. Aby umożliwić wykrycie tych błędów podczas kompilacji, projekty ASP.NET MVC zawierają teraz właściwość MvcBuildViews, która jest domyślnie wyłączona. Aby włączyć tę właściwość, otwórz plik projektu i ustaw właściwość MvcBuildViews na wartość true, jak pokazano w poniższym przykładzie:

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

Uwaga Włączenie tej funkcji wydłuża czas kompilacji.

Możesz zaktualizować projekty utworzone za pomocą poprzednich wersji MVC, aby uwzględnić sprawdzanie poprawności widoków w czasie kompilacji, wykonując następujące kroki:

  1. Otwórz plik projektu w edytorze tekstu.
  2. Dodaj następujący element pod najwyższym <PropertyGroup>elementem: <MvcBuildViews>true</MvcBuildViews>
  3. Na końcu pliku projektu usuń komentarz z <Target Name="AfterBuild">elementu i zmodyfikuj go, aby pasował do następujących elementów:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
Jeśli to nie zadziała w twoim projekcie, sprawdź, czy gdzieś w pliku projektu nie ma <MvcBuildViews> false </MvcBuildViews>. Zastępowało nowy element <MvcBuildViews>, który dodałem na nim.
Adrian Grigore,

3
@mxmissile: Scott Guthrie zalecił dodanie projektu wdrożenia internetowego do swojego rozwiązania, aby uzyskać tego rodzaju wsparcie w projektach aplikacji internetowych: weblogs.asp.net/scottgu/archive/2006/09/22/...
Zhaph - Ben Duguid

6
Upewnij się, że EnableUpdateable ma ustawioną wartość false, w przeciwnym razie widoki nie zostaną wstępnie skompilowane. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg

55
Dlaczego, dlaczego, dlaczego ... nie ma skrótu klawiaturowego do budowania z widokami lub bez? MS dlaczego?
dariol,

2
To jest rozwiązanie dodane do narzędzi MVC. stackoverflow.com/a/2670792/878612
lko

50

Możesz użyć do tego 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

gdzie „ / Virtual / Application / Path / Or / Path / In / IIS / Metabase ” jest mniej więcej taki: „ / MyApp ” lub „ / lm / w3svc2 / 1 / root /

Istnieje również zadanie AspNetCompiler na MSDN, pokazujące, jak zintegrować aspnet_compiler z 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
To jest nieaktualne, patrz fragment dokumentu readme poniżej.
JarrettV

1
Inna odpowiedź opisuje zadania projektu w sposób bardziej szczegółowy, ale część aspnet_compiler jest nadal poprawny (i użyteczne na agentów kompilacji).
mlhDev,

26

Ponadto, jeśli używasz Resharpera, możesz aktywować analizę Solution Solution Analysis i wykryje ona wszelkie błędy kompilatora, które możesz mieć w plikach aspx. Właśnie to robimy ...


4
To prawda, że ​​działa na pliki aspx, ale analiza całego rozwiązania nie obejmuje plików ascx (kontroli użytkownika)
mookid8000 11.01.2009

3
Wierzę, że robi to w R # 5, ale jest to ogromny świnia zasobów dla dużych projektów (nawet na mojej domowej maszynie o pojemności 16 GB nie warto tego używać).
Andrew

3
@Andrew / @ mookid8000 - R # będzie również wychwytywać błędy, których nie będzie kompilator, takie jak brakujące / nieprawidłowe widoki i działania. R # nieco spowolni twój komputer (uważam, że jest to dobre w przypadku dużego projektu z 4 GB pamięci RAM i hiperwątkowym procesorem), ale łatwo wracam do czasu spędzonego na czekaniu na to i kończę mniej operacji na moim Kod, ponieważ R # zapewnia operacje wyższego poziomu, które grupują razem wiele kroków, które musiałbym podjąć, aby ręcznie osiągnąć to samo zadanie. Twój projekt musi być ogromny!
Drew Noakes,

5
W przypadku dużych projektów „spowolnienie komputera” jest niedopowiedzeniem. Moja maszyna do budowania ma 16 GB pamięci RAM i 8 rdzeni (2 Xeony) i to po prostu CRAWLS. Mam wrażenie, że R # po prostu nie został stworzony dla projektów naszej wielkości ... np. Nasze rozwiązanie ma ~ 30 projektów, kilka milionów LOC i wiele setek wyświetleń. Uwielbiam R # w naszych mniejszych projektach (np. Kilka projektów i nie więcej niż 50 wyświetleń), ale w naszym dużym zawsze musimy go wyłączyć.
Sygnał dźwiękowy

1
To może działać, ale URUCHOMIAJ SIĘ! Włączyłem to, myśląc, że moje rozwiązanie jest małe i nigdy nie zakończyłem „analizy” i zjadłem całą pamięć RAM i procesor. Dojście do siebie zajęło mi 15 minut.
emragins

11

Następna wersja ASP.NET MVC (dostępna w styczniu) powinna zawierać zadanie MSBuild, które kompiluje widoki, więc możesz poczekać.

Zobacz ogłoszenie



6

Kompilacja> Uruchom analizę kodu

Skrót: Alt+F11

Pomógł mi złapać błędy Razor.


2
Poparłem tę odpowiedź, ponieważ skrót rzeczywiście ujawnił błąd Razor. Jednak później zauważyłem, że wydaje się działać tylko wtedy, gdy masz plik .cshtml otwarty w IDE.
Michael12345,

1

Korzystanie z rozszerzenia do narzędzi wydajnościowych Visual Studio ( bezpłatne ) trochę pomaga . W szczególności Solution Error Visualizerfunkcja. Dzięki niemu błędy kompilacji oznaczone wizualnie w eksploratorze rozwiązań (w pliku źródłowym, w którym znaleziono błąd). Jednak z jakiegoś powodu ta funkcja nie działa jak w przypadku innych błędów w innym miejscu w kodzie.

W widokach MVC wszelkie błędy czasu kompilacji będą nadal podkreślone na czerwono w odpowiednich plikach .cs, ale sygnalizowanie tych błędów nie jest propagowane w górę w Eksploratorze rozwiązań (w żaden sposób, nawet w zawierającym plik źródłowy).

Dziękuję za BlueCloudspoprawienie mojego poprzedniego oświadczenia.

Właśnie zgłosiłem to jako problem w projekcie github rozszerzenia.


1
Próbowałem elektronarzędzi produktywności. Ale nie zachowuje się tak, jak tu się mówi. W widoku maszynek jest błąd, ale kompilacja kończy się powodzeniem. widoki nie są zaznaczone ani podkreślone na czerwono, ani nigdzie w drzewie programu do rozwiązywania problemów.
Blue Clouds

2
@ BlueClouds: masz rację. Utworzyłem przykładowy projekt i dodałem błąd kompilacji w widoku. Rozszerzenie podkreśli błędne linie na czerwono, ale nie spowoduje propagacji błędu w eksploratorze rozwiązań. Poprawiam to, co powiedziałem w odpowiedzi. Pozostawiam odpowiedź tutaj, ponieważ nadal trochę pomaga, a jednocześnie nie rozwiązuje skutecznie problemu.
Veverke,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.