11 June 2009 ASP.NET MVC, Build, HowTo, View Robert Muehsig

imageWer etwas mit ASP.NET MVC rumspielt wird feststellen, dass man in den View reinschreiben kann was man will, es wird meistens gebaut. Erst wenn man die Seite dann betritt kommt ein Fehler. Mit einem kleinen Trick kann man Views auch zur Kompilierzeit checken.

Im View

Wenn man in einem ASP.NET MVC View irgendwas verkehrt macht, warnt zwar Visual Studio (obwohl man diesen Tipp nicht immer trauen kann), aber bauen lässt sich dies schon:

image

Exceptions erst zur Laufzeit: HttpCompileException

Wenn man dies nun ausführt bekommt man diesen tollen Fehler:

image

Bei einer etwas größeren Seite wird dies allerdings sehr mühsam.

Problemlösung:

Um auch zur Kompilierzeit die View mit einzubeziehen muss man mit einem Texteditor die .csproj Projektdatei öffnen und dort folgende Änderungen machen:

<PropertyGroup>
  <OutputType>Library</OutputType>
  ...

  <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  <!--<MvcBuildViews>false</MvcBuildViews>-->
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>

Wichtig hier ist "MvcBuildViews". Dies wird per Default im oberen Abschnitt auf false gesetzt. Dieses könnt ihr entfernen. In den jeweiligen PropertyGroups könnt ihr dann entweder für Debug und Release die Option mit aktivieren.

Ergebnis:

image

Allerdings kommt man mit einem Doppelklick (leider) nicht in den View, sondern man springt in den Code der kompilierten Assembly. Allerdings kann man es nun einigermaßen zurückverfolgen.

Performance:

Man sollte allerdings sich überlegen ob man die Option beim Debug aktiviert. Dadurch dauert der Build Prozess um einiges Länger. Vor einem Release ist es aber jedenfall praktisch.

An der Stelle möchte ich mich bei Daniel Richter für den Tipp danken. Im Web bin ich bereits auf diesen Post gestoßen der dasselbe vorschlägt, falls meine Erklärung nicht verständlich ist ;)


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de