Внешняя область ASP.NET MVC 3 не компилируется во время выполнения (работает в предварительной версии 1, но не в RC)

Проблема

ASP.NET MVC 3 RC выдает мне ошибку компиляции во время выполнения (при просмотре) во внешнюю область MVC. Сам сайт работает, но плагин отказывается загружаться, вызывая проблему компиляции, относящуюся к неизвестной модели.

LogOn.cshtml

@model TestProject.Models.LogOnModel
@{
    View.Title = "Log On";
}
//.....omitted for brevity

Ошибка во время выполнения.

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0103: The name 'model' does not exist in the current context

Source Error:


Line 38:         public override void Execute() {
Line 39: 
Line 40: Write(model);
Line 41: 
Line 42: WriteLiteral(" TestPlugin.Models.LogOnModel\r\n");

Предпосылки

Веб-сайт является веб-сайтом ASP.NET MVC 3 Preview 1 I только что перешли на ASP.NET MVC 3 RC. Я прочитал примечания к выпуску и обновил их соответствующим образом, но все же столкнулся с проблемой с WebMatrix. Я нашел SO-вопрос, в котором кто-то из команды MVC предложил до RTM использовать следующее для принудительного включения пространств имен (я поместил их в web.config, но это не сработало).

namespace WebMatrix.Data { class Foo { } }
namespace WebMatrix.WebData { class Foo { } }

Это решило мою проблему внутри веб-сайт и веб-сайт теперь нормально загружаются в MVC 3 RC. Однако проблема заключается во внешней области MVC (отдельная сборка).

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

Итак, у меня есть плагин аутентификации, например, который выглядит так.

-Controllers
-- AccountController.cs
-Models
-- AccountModels.cs
-Views
--Account
--- LogOn.cshtml
--- ChangePassword.cshtml
--- ...
-Web.config
AccountAreaRegistration.cs
Web.config

Помимо того факта, что представления помечены как встроенные ресурсы, AccountController расширяет PluginController, который знает, как загружать встроенные resouces и удаляемый global.asax, это довольно стандартная область MVC.

Я попытался создать новый пустой проект тестового плагина MVC 3 и медленно добавить соответствующий код. Это гарантирует, что все ссылки и web.configs верны. Но я все еще получаю ту же проблему с моделью, описанную выше. Проект компилируется во время разработки, но вызывает проблему компиляции во время выполнения, когда он пытается создать представления, которые он выглядит.

Для ясности, все это прекрасно работает в ASP.NET MVC 3 Preview 1 . Тем не мение, Теперь, когда я обновил его до MVC 3 RC, у меня основной веб-сайт работает, но внешняя область не работает.

В самой структуре плагинов нет ничего плохого. Он отлично работает в MVC 3 Preview 1. Я ищу ответы, которые могут пролить немного света на то, что может происходить в MVC 3 RC, и почему я могу использовать получение этой ошибки модели.

Есть идеи?

Обновление

Интересно, что если я изменю объявление модели в верхней части представления на синтаксис предварительного просмотра 1 `@inherits System.Web.Mvc.WebViewPage

, я получу другую ошибку компилятора времени выполнения. На этот раз я получаю сообщение об ошибке чуть ниже, когда Html.ValidationSummary начинается для формы входа в систему.

@inherits System.Web.Mvc.WebViewPage<TestProject.Models.LogOnModel>
@{
    View.Title = "Log On";
}
<div class="content_item half loginform">
    <div class="content_body">
        <h1>VastID Login</h1>
        @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") // <=== Compilation issue here on Html.ValidationSummary
        @using (Html.BeginForm())
        {
          // .. omitted for brevity
        }
    </div>
</div>
Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1061: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'ValidationSummary' and no extension method 'ValidationSummary' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

Source Error:


Line 49: 
Line 50: 
Line 51:    Write(Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again."));
Line 52: 
Line 53: WriteLiteral("\r\n");

Интересно, что ошибок времени компиляции нет. System.Web.WebPages, System.Web.Helpers и все необходимые библиотеки DLL MVC 3 RC присутствуют. Включая необходимые файлы web.config. Однако, как будто они недоступны, когда представление пытается загрузить.

Фактический синтаксис бритвы, который я считаю частью System.Web.WebPages? Где живет Html.ValidationSummary? System.Web.Mvc или System.Web.Helpers?

13
задан Joshua Hayes 12 November 2010 в 02:48
поделиться