2010-05-10 26 views
10

Estoy intentando desplegar 2 proyecto ASP.NET MVC (VS2010) para Windows Server 2008 R2No se pudo cargar el tipo 'System.Web.Mvc.ViewUserControl <SOMETYPE>'

Funciona perfectamente en la máquina dev. Pero extraño error se produce en Server 2008 R2: Cuando Ascx archivo tiene cabecera que utiliza tipo genérico: Informes

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

servidor No se pudo cargar el tipo 'System.Web.Mvc.ViewUserControl < MyProj.Web.Models. RangeViewModel > '.

Pero cuando declaro en algún lugar de Cs tipo de archivo como

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

y usarlo en lugar de <% @ Control de cabecera. Entonces funciona como debería.

¿Echo de menos algo?

ACTUALIZACIÓN

despliego aplicación en dos pasos (en el servidor):

  1. Volver a generar solución VS de la fuente utilizando la línea de comandos de MSBuild (para .NET 4)
  2. de inicio personalizados msbuild tarea (tenga el archivo publih.msbuild para esto) que ejecuta dos destinos: Targets = "ResolveReferences; _CopyWebApplication"
+0

¿Cómo se implementa? –

+0

Actualicé mi publicación inicial – Evgenyt

+0

¿Ha intentado 'Inherits =" System.Web.Mvc.ViewUserControl'1 [[MyProj.Web.Models.RangeViewModel]] ''? –

Respuesta

0

Podría dañarse la instalación de ASP.NET MVC en el servidor. Sugiero desinstalar MVC y volver a instalar con Web Platform Installer. También tuve problemas cuando instalé utilizando los archivos de configuración descargados, así que eliminé todo y fui con el instalador de la plataforma web.

Otra sugerencia sería crear un nuevo cuadro de servidor nuevo, puede ser virtual, y probarlo allí.

También la solución de reconstrucción podría ayudar y comprobar que web.config también está bien.

También intente si la herramienta MvcDiagnostics.aspx muestra alguna anomalía. Consulte this entrada de blog

Háganos saber si algo ayuda.

14

Parece que el motor de vista tiene problemas para compilar una clase base fuertemente tipada en el atributo Heredar. Yo tenía el mismo problema y actualizar la sección de "páginas" de web.config para esto ayudó:

<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> 
+0

Sí, igual, pero para MVC 2 – Evgenyt

+0

Oh sí - para MVC2 debería ser "Versiones = 2.0.0.0". Teóricamente, si el proyecto MVC se construye y publica correctamente, esta modificación de la sección "páginas" no es necesaria. En la práctica, al migrar entre diferentes versiones y compilaciones de MVC, es la forma más fácil de reparar el proyecto – PanJanek

+1

del mismo modo: es posible que vea este error si desplegó un nuevo "área" y olvidó copiar el 'web.config' de la zona. Solo me pasó a mí. – bendytree

5

No se pudo encontrar por qué, pero el siguiente ayudado (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"> 

Inicialmente encontrado similar para asp.net mvc 1

+0

Hay algo mal con su proyecto o su compilación porque no es necesario en web.config para que la aplicación ASP.NET MVC funcione localmente o en el servidor. – mare

+0

@mare tiene razón en un resepectivo, no debería ser necesario, pero en una instancia no pudimos ejecutar una aplicación sin agregar la etiqueta de páginas como se describe. Me encantaría saber el verdadero problema, mayby ​​machine.config está haciendo algo? – Jafin

1

Tuve un problema similar. Hay varios puntos importantes

  1. Espacio necesario entre los corchetes y el nombre del tipo.
  2. Necesita modelo fundido para su tipo de modelo.

Aquí es lo que tengo

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

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