Daily Archives: 2014.03.18. 8:40

MVC nézetek fordítása hibamentesen

A Visual Studio és az ASP.NET alapértelmezés szerint nem fordítási időben, hanem futási időben dolgozza fel a MVC nézetekben lévő kódot. Ennek természetesen az az eredménye, hogy ha ott valamilyen hibát vétünk, akkor az csak futási időben fog kiderülni.

Szerencsére van arra lehetőség, hogy rávegyük a Studiot, fordítsa le a nézeteket is a build folyamat részeként. Ehhez nyissuk meg az MVC projekthez tartozó projekt fájlt (.csproj), és írjuk át az MvcBuildViews elem értékét false-ról true-ra:

<MvcBuildViews>true</MvcBuildViews>

Ez meg is oldja a kezdeti problémát, ám gyakran bevezet egy újabbat. Időnként fordításkor vagy a webalkalmazás publikálásakor az alábbi hibaüzenetet kaphatjuk:

It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level.  This error can be caused by a virtual directory not being configured as an application in IIS.

A legborzasztóbb ebben az üzenetben, hogy nem csak az nem derül ki belőle, hogy hol a hiba, hanem az sem, hogy hogyan lehet kijavítani.

A megoldás az obj mappa törlése fordítás előtt, és a hibaüzenet máris megszűnik. Gondoltad volna a hibaüzenet alapján?

Aki nem szeretné mindig kézzel törölgetni ezt a mappát, az persze megteheti a build folyamat első lépéseként is. Szerencsére az MSBuild ad nekünk egy BaseIntermediateOutputPath nevű változót, ami pont az obj mappára mutat, sőt még egy RemoveDir nevű task is van hozzá, így már csak össze kell pakolni őket. Megint nyissuk meg a .csproj fájlt, és vegyünk fel egy RemoveDir elemet a BeforeBuild target-hez:

<Target Name="BeforeBuild">
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>

Akinek esetleg a bin mappával van személyes nézeteltérése, az esetleg használhatja a BaseOutputPath változót.

 

Technorati-címkék: ,,
Advertisements