Не удалось загрузить тип 'System.Web.Mvc.ViewUserControl <SOMETYPE>'

Я пытаюсь развернуть проект ASP.NET MVC 2 (VS2010) для Win Server 2008 R2

Он отлично работает на dev-машине. Но на сервере 2008 R2 возникает странная ошибка: Когда .ascx файл имеет заголовок, который использует общий тип:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>" %>

Отчеты сервера Невозможно загрузить тип 'System.Web.Mvc.ViewUserControl < MyProj.Web.Models.RangeViewModel > '.

Но когда я объявляю где-нибудь в формате .cs, например

public class AA : System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>
{
}

и использовать его вместо этого в <% @Control header. Затем он работает так, как должен.

Я что-то пропустил?

UPDATE

Я развертываю приложение в два этапа (на сервере):

  • Восстановить VS-решение из исходного кода с помощью командной строки MSBuild (для .NET 4)
  • Запустите пользовательскую задачу msbuild (для этого есть файл publih.msbuild), который выполняет две цели: Targets = "ResolveReferences; _CopyWebApplication"

Ответ 1

Я вижу, что у механизма просмотра есть проблемы с компиляцией строго типизированного базового класса в атрибуте Inherit. У меня была такая же проблема, и обновление раздела "страницы" в Web.Config помогло:

 <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
          <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
        <!-- rest of your pages section -->
</pages>

Ответ 2

Не удалось найти причину, но помогло следующее (web.config):

<pages
         pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

Изначально найден аналогичный для asp.net mvc 1

Ответ 3

У меня была аналогичная проблема. Существует несколько важных моментов

  • Требуемое пространство между скобками и именем типа.
  • Вам нужна модель литья для вашего типа модели.

Вот что я получил

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl <MyNamespace.MyModel>" %>
<%@ Import Namespace="MyNamespace" %>
<% var model = (MyModel)Model; %>

<h1><% model.MyField %></h1>

Ответ 4

Может быть запущена установка ASP.NET MVC на сервере. Я предлагаю удалить MVC и переустановить с помощью установщика веб-платформы. У меня также были проблемы, когда я установил с помощью загруженных файлов настроек, поэтому я удалил все и пошел с установщиком веб-платформы.

Еще одно предложение - создать новый серверный сервер - может быть виртуальным - и попробовать там.

Также восстановление может помочь и проверить, что web.config тоже в порядке.

Также попробуйте, если инструмент MvcDiagnostics.aspx показывает любые аномалии. Проверьте это сообщение в блоге

Сообщите нам, если что-нибудь поможет.