Компиляция представлений в ASP.NET MVC

Любой код, написанный для платформы .NET должен быть скомпилирован, и это прекрасно. Компиляция позволяет быть уверенным в том, что код корректный и в нем нет синтаксических ошибок. К сожалению, компиляция обязательная не всегда - представления ASP.NET MVC можно изменять без компиляции представлений. Нет, компиляция, конечно, есть, но она выполняется непосредственно перед запуском этого кода. И если в коде содержится синтаксическая ошибка, то узнаем мы о ней только тогда, когда запустим приложение. Из представления мы можем обращаться к моделям, которые так же могу измениться и приложение перестанет работать.

Чтобы изменить это поведение, в проекте ASP.NET MVC существует специальный параметр — MvcBuildViews. Если установить этот параметр в true, то в процессе сборки приложения, представления тоже будут компилироваться. Это означает, что если у вас есть ошибки в представлениях, вы увидите их уже на этапе компиляции.

Небольшое замешательство вызывает тот факт, что в свойствах проекта ASP.NET нет опции, чтобы изменить этот параметр. Поэтому, чтобы воспользоваться этой возможностью, придется немного поработать руками. И для этого есть два способа.

Первый способ заключается в том, чтобы запустить сборку проекта с явно заданным значением параметра MvcBuildViews:

MSBuild.exe WebProject.csproj  /p:MvcBuildViews=true

Внутри msbuild-скрипта это может выглядеть вот так:

<MSBuild Projects="WebProject.csproj" Targets="Build" Properties="MvcBuildViews=true"/>

Второй способ - задать значение параметра MvcBuildViews прямо в файле проекта. К сожалению, Visual Studio не предоставляет для этого инструментов, поэтому в текстовом редакторе нужно открыть файл проекта .csproj и изменить значение этого параметра:

Если параметр отсутствует, то нужно просто создать узел с именем MvcBuildViews и задать значение внутри него.

После этих манипуляций при сборке проекта ASP.NET MVC представления будут компилироваться вместе с основным проектом и если они содержат ошибки, они будут выявлены ещё на этапе компиляции.