2013-08-02 10 views
6

Ich habe erfolgreich Razor Viewpages in einem Selfhosted-Service implementiert, die Seiten perfekt gerendert, bis ich auf 3.9.56 aktualisiert habe. Die Ansichten wurden in einer Windows Forms-Anwendung zusammen mit einem Windows Forms-Client getestet, der JSON-Antworten vom Dienst verwenden würde. Das funktioniert immer noch perfekt, aber jetzt, wenn ich die Razor Ansichten teste ich halte die folgende Ausnahme erhalten, wenn eine Seite anfordert:ServiceStack Razor Ansichten nicht kompilieren

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?)

ich eine kleine Konsolenanwendung gebaut, um den Service und die Razor Ansichten und die Seiten zu hosten richtig darstellen. Beide Projekte haben dieselben Verweise, mit Ausnahme der Windows Forms-Assemblyverweise im Testframework. Beide Projekte starten den AppHost von derselben Verwaltungsklasse in einer separaten Assembly und alle Views wurden veröffentlicht.

Der einzige Unterschied in der Konfigurationsdatei ist ein <userSettings> Abschnitt im Windows Forms-Testframework.

[Bearbeiten]

Wenn ich @inherits View ändern ServiceStack.Razor.ViewPage alles @inherits als

+0

können Sie bitte etwas Code zur Verfügung stellen. Ihre Erklärung, obwohl es detailliert nicht hilft. Code mit Fehlermeldung wird sicherlich helfen. – kunjee

+0

Die Fehlermeldung ist da. Den Code kann ich leider nicht teilen. Ich werde versuchen, ein Beispiel mit ServiceStack zu bauen, das dem Problem sehr ähneln würde, sobald ich eine Chance habe – cornelha

+0

ein Beispielcode wird sicherlich helfen. Nur durch Fehlermeldung ist es fast unmöglich zu lösen Problem – kunjee

Antwort

6

Dieses Problem wurde mich verrückt erwartet funktioniert. Ich habe gerade die Lösung: Die app.config der ServiceStack.Razor Anwendung einen Abschnitt wie folgt enthält:

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

Dies sind die Standard-Namespace Importe für alle Razor Vorlagen sind. Das Problem tritt auf, wenn sich die Anwendung in einer separaten DLL befindet, so wie es bei Ihrem Beispiel der Fall ist. Nehmen wir an, Sie haben ein Konsolenanwendungsprojekt namens MyApp.Host, das auf MyApp verweist. Statt nach den Standardimporten in MyApp.Host.exe.config zu suchen, sucht ServiceStack nach ihnen in der Konfigurationsdatei der DLL, die den AppHost enthält, in diesem Fall MyApp.dll.config. Das Problem ist, dass diese Konfigurationsdatei beim Erstellen nicht automatisch in den Ordner bin MyApp.Host kopiert wird.

Die Lösung ist relativ einfach: Fügen Sie etwas ähnlich der folgenden auf die Postbuildereignisse MyApp.Host:

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

Edit: Sie können auch die Importe programmatisch hinzufügen (siehe 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

Ja, das ist genau meine Situation. Meine Ansichten und AppHostHttpListenerBase befindet sich in einer anderen Assembly. Ich verwende die Assembly in einer Windows Forms-Anwendung, einem Dienst und einer Konsolenanwendung. Das hat alle meine Probleme gelöst, danke. – cornelha

Verwandte Themen