Не удалось загрузить тип '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 показывает любые аномалии. Проверьте это сообщение в блоге
Сообщите нам, если что-нибудь поможет.