Compiler des vues dans ASP.NET MVC

558

Je veux qu'une tâche msbuild compile les vues afin que je puisse voir s'il y a bien des erreurs de temps de compilation ... au moment de la compilation. Des idées?

John Oxley
la source
1
Je ne sais pas quel moteur de visualisation vous utilisez, mais si vous utilisez Razor, vous voudrez peut-être consulter mon article de blog: <a href = " chrisvandesteeg.nl/2010/11/22/… votre asp.net vues mvc Razor dans une dll séparée </a> Il devrait être possible d'utiliser ce code pour d'autres moteurs de visualisation également, mais ne l'ont pas encore fait et testé
Chris van de Steeg

Réponses:

154

Je recommanderais franchement le paquet de pépites RazorGenerator. De cette façon, vos vues ont un .designer.csfichier généré lorsque vous les enregistrez et en plus d'obtenir des erreurs de temps de compilation pour vos vues, elles sont également précompilées dans l'assemblage (= échauffement plus rapide) et Resharper fournit également une aide supplémentaire.

Pour l'utiliser, incluez le package de nuget RazorGenerator dans votre projet ASP.NET MVC et installez l' extension " Razor Generator " sous l'élément sous Outils → Extensions et mises à jour .

Nous utilisons cela et la surcharge par compilation avec cette approche est beaucoup moins. En plus de cela, je recommanderais probablement .NET Demon de RedGate qui réduit encore davantage l'impact sur le temps de compilation.

J'espère que cela t'aides.

Mirko
la source
1
existe-t-il une solution similaire pour VS2012?
daniel
6
Dommage qu'il ne supporte que C # et pas VB.Net
Ed DeGagne
3
@zoidbergi RazorGenerator fonctionne avec VS2012; lors de l'utilisation de RazorGenerator.Mvc et RazorGenerator.MsBuild: pas besoin d'extension. Voir l'entrée de blog sur stacktoheap.com
Jeroen K
2
Peut-il être utilisé pour rechercher uniquement les erreurs ou remplace-t-il le moteur de vue lors du déploiement de l'application?
niico
J'ai installé le package de pépites RazorGenerator et l'extension Razor Generator. Rien n'a été changé dans mon projet. Aucun fichier .designer.cs n'est apparu. J'utilise Visual Studio 2017.
Michael Samteladze
563

Extrait du fichier Lisezmoi doc pour RC1 (non indexé par Google)

Étape de post-génération du compilateur ASP.NET

Actuellement, les erreurs dans un fichier de vue ne sont détectées qu'au moment de l'exécution. Pour vous permettre de détecter ces erreurs au moment de la compilation, les projets ASP.NET MVC incluent désormais une propriété MvcBuildViews, qui est désactivée par défaut. Pour activer cette propriété, ouvrez le fichier de projet et définissez la propriété MvcBuildViews sur true, comme indiqué dans l'exemple suivant:

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

Remarque L' activation de cette fonctionnalité ajoute une surcharge au temps de génération.

Vous pouvez mettre à jour les projets créés avec les versions précédentes de MVC pour inclure la validation des vues au moment de la construction en procédant comme suit:

  1. Ouvrez le fichier de projet dans un éditeur de texte.
  2. Ajoutez l'élément suivant sous l'élément le plus haut <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. À la fin du fichier de projet, décommentez l' <Target Name="AfterBuild">élément et modifiez-le pour qu'il corresponde à ce qui suit:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
JarrettV
la source
27
Si cela ne fonctionne pas pour votre projet, vérifiez s'il n'y a pas de <MvcBuildViews> false </MvcBuildViews> quelque part dans votre fichier de projet. Il remplaçait le nouvel élément <MvcBuildViews> que j'avais ajouté par-dessus.
Adrian Grigore
3
@mxmissile: Scott Guthrie a recommandé d'ajouter un projet de déploiement Web à votre solution pour obtenir ce type de support dans les projets d'application Web: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid
6
Assurez-vous que EnableUpdateable est défini sur false, sinon les vues ne seront pas précompilées. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg
55
Pourquoi, pourquoi, pourquoi ... il n'y a pas de raccourci clavier pour construire avec ou sans vues? MS pourquoi?
dariol
2
Il s'agit de la solution ajoutée aux outils MVC. stackoverflow.com/a/2670792/878612
lko
50

Vous pouvez utiliser aspnet_compiler pour cela:

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

où " / Virtual / Application / Path / Or / Path / In / IIS / Metabase " est quelque chose comme ceci: " / MyApp " ou " / lm / w3svc2 / 1 / root / "

Il existe également une tâche AspNetCompiler sur MSDN, montrant comment intégrer aspnet_compiler avec 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>
maxnk
la source
5
Ceci est obsolète, voir un extrait du document Lisez-moi ci-dessous.
JarrettV
1
L' autre réponse décrit la tâche de projet plus en détail, mais la partie aspnet_compiler est toujours correcte (et utile sur les agents de build).
mlhDev
26

De plus, si vous utilisez Resharper, vous pouvez activer Solution Wide Analysis et il détectera toutes les erreurs de compilation que vous pourriez avoir dans les fichiers aspx. Voilà ce que nous faisons ...

bh213
la source
4
Il est vrai que cela fonctionne pour les fichiers aspx, mais l'analyse à l'échelle de la solution n'inclut pas les fichiers ascx (contrôles utilisateur)
mookid8000
3
Je crois que c'est le cas dans R # 5, mais c'est un énorme porc de ressources pour les grands projets (même sur ma machine domestique de 16 Go, cela ne vaut pas la peine d'être utilisé).
Andrew
3
@Andrew / @ mookid8000 - R # détectera également les erreurs que le compilateur ne détectera pas, telles que les vues et les actions manquantes / incorrectes. R # ralentira un peu votre PC (je le trouve bien sur un projet de grande taille avec 4 Go de RAM et un processeur hyperthreadé) mais je récupère facilement le temps que je passe à l'attendre, et je finis par faire moins d'opérations sur mon code comme R # fournit des opérations de niveau supérieur qui regroupent les nombreuses étapes que je devrais prendre pour réaliser la même tâche manuellement. Votre projet doit être énorme!
Drew Noakes
5
Pour les grands projets, «ralentissez un peu votre PC» est un euphémisme. Ma machine de construction a 16 Go de RAM et 8 cœurs (2 Xeons), et elle ne fait que CRAWLS. J'ai l'impression que R # n'a tout simplement pas été conçu pour des projets de notre taille ... par exemple, notre solution a environ 30 projets, quelques millions de LOC et plusieurs centaines de vues. J'adore R # sur nos petits projets (par exemple quelques projets et pas plus de 50 vues), mais sur notre grand, nous devons toujours le désactiver.
Bip bip
1
Cela PEUT fonctionner, mais RUN AWAY! J'ai activé cela en pensant que ma solution était petite et qu'elle n'a jamais fini «d'analyser» et a mangé toute ma RAM et mon processeur. Ça m'a pris 15 minutes pour récupérer.
emragins
11

La prochaine version d'ASP.NET MVC (disponible en janvier environ) devrait avoir une tâche MSBuild qui compile les vues, vous pouvez donc attendre.

Voir l' annonce

bh213
la source
6

La réponse donnée ici fonctionne pour certaines versions de MVC mais pas pour d'autres.

La solution simple fonctionnait pour MVC1, mais lors de la mise à niveau vers MVC2, les vues n'étaient plus conformes. Cela était dû à un bogue dans les fichiers de projet du site Web. Voir cet article hacké.

Voir ceci: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx

user1040323
la source
6

Générer> Exécuter l'analyse de code

Raccourci clavier: Alt+F11

M'a aidé à détecter les erreurs de rasoir.

Abu Abdullah
la source
2
J'ai voté contre cette réponse parce que le raccourci a effectivement révélé une erreur Razor. Cependant, j'ai remarqué par la suite que cela ne semble fonctionner que si le fichier .cshtml est ouvert dans l'EDI.
Michael12345
1

Utilisation des outils de productivité de Visual Studio extension ( gratuite ) de aide un peu . Plus précisément, la Solution Error Visualizerfonctionnalité. Avec lui, les erreurs de compilation marquées visuellement dans l'explorateur de solutions (dans le fichier source où l'erreur a été trouvée). Pour une raison quelconque, cependant, cette fonctionnalité ne fonctionne pas comme avec d'autres erreurs ailleurs dans le code.

Avec les vues MVC, toutes les erreurs de compilation seront toujours soulignées en rouge dans leurs fichiers .cs respectifs, mais la signalisation de ces erreurs n'est pas propagée vers le haut dans l'Explorateur de solutions (en aucun cas, même pas dans le fichier source contenant).

Merci d' BlueCloudsavoir corrigé ma déclaration précédente.

Je viens de signaler cela comme un problème sur le projet github de l'extension.

Veverke
la source
1
J'ai essayé les outils électriques de productivité. Mais ne se comporte pas comme ce qui est dit ici. Il y a une erreur dans la vue du rasoir mais la construction est réussie. les vues ne sont ni marquées ni soulignées en rouge, ni nulle part dans l'arborescence de l'explorateur de solutions.
Blue Clouds
2
@BlueClouds: vous avez raison. J'ai créé un exemple de projet et ajouté une erreur de compilation dans une vue. L'extension soulignera les lignes d'erreur en rouge, mais ne propagera pas l'erreur vers le haut dans l'explorateur de solutions. Je corrige ce que j'ai déclaré dans la réponse. Je laisse la réponse ici car cela aide encore un peu, tout en ne résolvant pas le problème efficacement.
Veverke