2013-08-02 23 views
6

Ho implementato con successo le Viewpage del rasoio in un servizio selfhosted, le pagine sono state renderizzate perfettamente finché non ho aggiornato a 3.9.56. Le viste sono state testate in un'applicazione Windows Form insieme a un client Windows Form che avrebbe utilizzato le risposte JSON dal servizio. Questo funziona ancora perfettamente, ma ora quando prova il rasoio Visualizzazioni Continuo a ricevere la seguente eccezione quando si richiede una pagina:Visualizzazioni del rasoio ServiceStack non in fase di compilazione

ERROR: Error occured while Processing Request: [HttpCompileException] c:\Users\Cornel\AppData\Local\Temp\2msjdedu.0.cs(24): error CS0246: The type or namespace name 'ViewPage' could not be found (are you missing a using directive or an assembly reference?), Exception: c:\Users\Cornel\AppData\Local\Temp\2msjdedu.0.cs(24): error CS0246: The type or namespace name 'ViewPage' could not be found (are you missing a using directive or an assembly reference?)

ho costruito una piccola applicazione console per ospitare il servizio e la vista Razor e le pagine rendere correttamente. Entrambi i progetti hanno gli stessi riferimenti, escluso per i riferimenti agli assembly Windows Form sul framework di test. Entrambi i progetti avviano l'AppHost dalla stessa classe di gestione in un assembly separato e tutte le visualizzazioni sono state pubblicate.

L'unica differenza nel file di configurazione è una sezione <userSettings> nel framework di test di Windows Form.

[Edit]

Quando cambio @inherits ViewPage a @inherits ServiceStack.Razor.ViewPage tutto funziona come previsto

+0

puoi fornire un codice. La tua spiegazione anche se non è dettagliata. Codice con messaggio di errore sarà sicuramente di aiuto. – kunjee

+0

Il messaggio di errore è presente. Il codice che sfortunatamente non posso condividere. Proverò a creare un esempio utilizzando ServiceStack che assomiglierà molto al problema non appena avrò la possibilità di utilizzare un codice di esempio – cornelha

+0

. Solo per messaggio di errore è quasi impossibile risolvere il problema – kunjee

risposta

6

Questo problema mi stava facendo impazzire. Ho appena trovato la soluzione: Il app.config dell'applicazione ServiceStack.Razor contiene una sezione come questa:

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="ServiceStack.Razor.ViewPage"> 
     <namespaces> 
     <add namespace="System.Linq" /> 
     <add namespace="ServiceStack.Html" /> 
     <add namespace="ServiceStack.Razor" /> 
     <add namespace="ServiceStack.Text" /> 
     <add namespace="ServiceStack.OrmLite" /> 
     <add namespace="MyApp" /> 
     <add namespace="MyApp.Services" /> 
    </namespaces> 
    </pages> 
</system.web.webPages.razor> 

Queste sono le importazioni namespace di default per tutti i modelli di rasoio. Il problema si verifica quando l'applicazione si trova in una DLL separata, come sembra sia il caso del tuo esempio. Supponiamo che tu abbia un progetto di applicazione console chiamato MyApp.Host, che fa riferimento a MyApp. Invece di cercare le importazioni di default in MyApp.Host.exe.config, ServiceStack le cerca nel file di configurazione della DLL contenente l'AppHost, in questo caso MyApp.dll.config. Il problema è che questo file di configurazione non viene copiato automaticamente nella cartella bin di MyApp.Host durante la creazione.

la soluzione è relativamente semplice: aggiungere qualcosa di simile a quanto segue per gli eventi post di build di MyApp.Host:

copy /y $(SolutionDir)MyApp\app.config $(TargetDir)MyApp.dll.config 

Edit: È anche possibile aggiungere le importazioni di programmazione (vedi Getting a HttpCompileException in ServiceStack Razor view (Self hosted)):

EndpointHostConfig.RazorNamespaces.Add("ServiceStack.Razor"); 
EndpointHostConfig.RazorNamespaces.Add("MyApp"); 
EndpointHostConfig.RazorNamespaces.Add("MyApp.Services"); 
SetConfig(new EndpointHostConfig 
{ 
    DefaultRedirectPath = "/Home", 
}); 
+0

Sì, questa è esattamente la mia situazione. My Views e AppHostHttpListenerBase si trovano in un altro assembly. Uso l'assembly in un'applicazione Windows Form, un servizio e un'applicazione console. Questo ha risolto tutti i miei problemi, grazie. – cornelha

Problemi correlati