В представлении, почему Visual Studio не знает, что точка с запятой после директивы модели может вызвать ошибку во время выполнения? - PullRequest
3 голосов
/ 28 сентября 2011

Я очень новичок в MVC3 и столкнулся с проблемой очень скоро после прохождения учебников asp.net по mvc3 от pluralsight.

Испытание строго типизированного примера введения раздела «добавление модели». Это работает:

@model MvcApplication1.Models.RestaurantReview
@{
    ViewBag.Title = "Home Page 1";
}
... 

Но это не так ... он строит, а затем подавляется ошибкой во время выполнения:

@model MvcApplication1.Models.RestaurantReview;
@{
    ViewBag.Title = "Home Page 1";
}
... 

Единственное отличие состоит в том, что точка с запятой после директивы @model превращает ее в оператор, а не в директиву.

Почему Visual Studio не знает, что это может произойти сбой? Сообщение об ошибке, которое IIS выдает во время сбоя, даже не является правильным номером строки, где ошибка фактически присутствует в коде.

VS подчеркивает линию красным цветом, говоря мне, что в утверждении могут использоваться только такие-то, но это не мешает успешной сборке.

Кажется, что отладка большого проекта была бы кошмаром, если бы он не был пойман сразу, не так ли?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Это явно ошибка. Мы знаем об этом и исправим для следующей версии MVC (на самом деле это исправление уже есть в MVC 4 Developer Preview).

2 голосов
/ 29 сентября 2011

Скомпилируйте ваши представления о событии сборки, и они будут задушены, если есть какая-либо синтаксическая ошибка.

Чтобы компилировать ваши представления, выполните следующие действия:

  1. Выгрузите ваш проект, щелкнув правой кнопкой мыши проект в обозревателе решений в VS и выбрав команду unload project
  2. Щелкните правой кнопкой мыши проект, который был преобразован в недоступный проект, и нажмите «Edit your_project_name.csproj» (это будетvbproj Я думаю, если ваш проект VB проекта)
  3. См. следующий код:

    <!--There some lines of code here and I deleted them to get to the point quickly-->
    
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <MvcBuildViews>false</MvcBuildViews>
    

  4. Измените значение узла MvcBuildViews с false на true

  5. После этого действия сохраните его и перезагрузите проект.

Затем создайте свое решение для его компиляции.Вы увидите, что ваши представления также будут скомпилированы.

ОБНОВЛЕНИЕ

Попробовал ваш пример, и он задохнулся, как предполагалось.Итак, у него Работает на моей машине Знак одобрения

enter image description here

ОБНОВЛЕНИЕ

Я написал небольшой блогпост на эту тему.Смотрите детали:

http://www.tugberkugurlu.com/archive/how-to-detect-errors-of-our-asp-net-mvc-views-on-compile-time-blow-up-in-my-face-theory

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...