2010-05-10 17 views
10

Sto cercando di distribuire ASP.NET MVC 2 del progetto (VS2010) per Windows Server 2008 R2Impossibile caricare il tipo 'System.Web.Mvc.ViewUserControl <SOMETYPE>'

Funziona perfettamente sulla macchina dev. Ma strano errore si verifica in Server 2008 R2: Quando ascx file ha un'intestazione che utilizza tipo generico: segnala

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

Server Impossibile caricare il tipo 'System.Web.Mvc.ViewUserControl < MyProj.Web.Models. RangeViewModel > '.

Ma quando dichiaro da qualche parte nel cs tipo di file come

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

e utilizzarlo al posto in <% @ Control intestazione. Quindi funziona come dovrebbe.

mi sto perdendo qualcosa?

UPDATE

schiero applicazione in due fasi (sul server):

  1. Rigenera soluzione VS dalla fonte utilizzando riga di comando MSBuild (per NET 4)
  2. lancio msbuild personalizzato task (avere un file publih.msbuild per questo) che esegue due destinazioni: Target = "ResolveReferences; _CopyWebApplication"
+0

Come stai distribuendo? –

+0

Aggiornato il mio post iniziale – Evgenyt

+0

Hai provato 'Inherits =" System.Web.Mvc.ViewUserControl'1 [[MyProj.Web.Models.RangeViewModel]] "'? –

risposta

0

Potrebbe essere incasinato l'installazione di ASP.NET MVC sul server. Suggerisco di disinstallare MVC e reinstallare con Web Platform Installer. Ho avuto problemi anche quando ho installato utilizzando i file di installazione scaricati, quindi ho rimosso tutto e sono andato con il Web Platform Installer.

Un altro suggerimento sarebbe quello di creare una nuova casella di server fresca - può essere virtuale - e provare lì.

Anche la ricostruzione della soluzione potrebbe aiutare e verificare che web.config sia ok.

Prova anche se lo strumento MvcDiagnostics.aspx mostra eventuali anomalie. Dai un'occhiata al post sul blog this

Facci sapere se qualcosa ti aiuta.

14

Sembra che il motore di visualizzazione abbia problemi nella compilazione della classe base fortemente tipizzata nell'attributo Inherit. Ho avuto lo stesso problema e l'aggiornamento della sezione "pagine" di web.config per questo ha aiutato:

<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ì, lo stesso, ma per MVC 2 – Evgenyt

+0

Oh sì - per MVC2 dovrebbe essere "Versioni = 2.0.0.0". Teoricamente - se il progetto MVC è correttamente compilato e pubblicato, questa modifica della sezione "pagine" non è necessaria. In pratica, quando si esegue la migrazione tra diverse versioni e build di MVC è il modo più semplice per riparare il progetto – PanJanek

+1

Analogamente - si potrebbe vedere questo errore se si è distribuita una nuova "area" e si è dimenticato di copiare il 'web.config 'dell'area. Mi è appena successo. – bendytree

5

Impossibile trovare perché, ma il seguente aiutato (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"> 

Inizialmente trovato simile per asp.net mvc 1

+0

C'è qualcosa di sbagliato nel tuo progetto o nella sua compilazione perché non è richiesto in web.config per l'applicazione ASP.NET MVC per funzionare localmente o sul server. – mare

+0

@mare hai ragione in una resepect, non dovrebbe essere richiesto, ma in un'istanza non potremmo ottenere un'app in esecuzione senza aggiungere il tag delle pagine come descritto. Mi piacerebbe sapere il vero problema, mayby ​​machine.config sta facendo qualcosa? – Jafin

1

Ho avuto un problema simile. Ci sono diversi punti importanti

  1. Spazio necessario tra parentesi e nome del tipo.
  2. Modello di getto necessario per il tipo di modello.

Ecco quello che ho ottenuto

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

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