MVC: Die unter '~ / ... / Index.cshtml' gefundene Ansicht wurde nicht erstellt

8

Ich habe ein modulares MVC-Projekt erstellt, um andere spezielle Webprojekte innerhalb derselben Laufzeit zu laden.

Andere Projekte befinden sich in einem Ordner im Stammverzeichnis der Website mit dem Namen "Module". Ich verwende das Attribut PreApplicationStartMethod , um die anderen Assemblys in den Unterverzeichnissen beim Booten zu laden.

Ich habe spezielle Routen hinzugefügt, um jedes Modul mit den Namespace-Einschränkungen zu targetieren.

Ich habe eine Klasse erstellt, die RazorViewEngine implementiert, um den viewPath zu überschreiben, wenn ein Aufruf für das Element im Modul erfolgt: ~ / Views / Home / Index.cshtml - & gt; ~ / Module / ModuleTest / Ansichten / Home / Index.cshtml.

Die Methode Index () in der dynamisch geladenen Bibliothek wurde erfolgreich aufgerufen, aber beim Rendern der Ansicht wurde ein Fehler angezeigt:

Siehe folgendes Bild: Ссылка

Der Rahmen sagt mir im Grunde, dass die Ansicht gefunden wurde, aber er wird es nicht wiedergeben. Hat jemand eine Idee, warum das Framework es ablehnt, es zu rendern?

Serverfehler in '/' Anwendung.

Die Ansicht unter '~ / Modules / ModuleTest / Views / Home / Index.cshtml' wurde nicht erstellt.

Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt.

Ausnahmedetails: System.InvalidOperationException: Die Ansicht unter '~ / Modules / ModuleTest / Views / Home / Index.cshtml' wurde nicht erstellt.

  • Ausnahme
%Vor%
  • Controller
%Vor%
  • Anzeigen
%Vor%
  • CustomRazorViewEngine
%Vor%     
Lex2193 16.12.2013, 15:02
quelle

2 Antworten

8

Ich habe das Problem durch Debuggen in Ссылка gefunden.

Ich lade tatsächlich die Bibliothek, die die Controller aus einem anderen Ordner als bin in meiner Klasse ModulesContainer enthält (siehe Frage). Aber innerhalb von System.Web.Mvc.dll , eine Methode versuchen, meinen Controller-Typ zu finden, indem Sie eine Assembly.Load () im Standardverzeichnis, warum ist das BuildManager.GetCompiledType () gibt null zurück.

Ich habe einen einfachen Weg gefunden, diese Methode mit:

zu überschreiben

%Vor%

und

%Vor%

Ich schaue nur in meinen vorgefertigten DLL-Cache, um die bereits geladene Assembly zu finden.

    
Lex2193 17.12.2013, 15:37
quelle
0

@ Lex2193: Ich habe ein Problem in Ihrer Antwort gefunden. Als ich Ihren Code verwendet habe, funktionierte er gut, außer in Situationen, in denen die referenzierte Assembly eine andere Referenz hat, von der sie abhängt:

%Vor%

Wenn Sie in einem Modulobjekt von [D] verwenden, das einige Aufrufe von etwas in [DD] enthält. Es wird auf TypeLoad-Ausnahme fehlschlagen. Wegen anfragender Versammlung. Also habe ich den Code zum ersten Suchen nach Modul bearbeitet:

%Vor%     
Gh61 14.11.2016 18:26
quelle

Tags und Links