Ich versuche, eine stark typisierte Ansicht basierend auf einer Klasse aus einer anderen Assembly zu erstellen. Aus irgendeinem Grund scheint meine Razor-Ansicht keine Sichtbarkeit anderer Assemblys zu haben, auf die in meinem Projekt verwiesen wird. z.B
@model MyClasses.MyModel
führt in Visual Studio 2010 zu dem Fehler "Der Typ- oder Namespace-Name wurde MyClasses
nicht gefunden (fehlt Ihnen eine using-Direktive oder eine Assembly-Referenz?)."
Dieselbe Klasse, auf die in der Standardansicht-Engine verwiesen wird, funktioniert einwandfrei. Ich habe die gleichen Probleme beim Versuch, die Klasse im Hauptteil meiner Ansicht zu referenzieren.
Vermisse ich etwas an Razor oder muss ich auf andere Weise auf die Baugruppe verweisen?
asp.net-mvc
asp.net-mvc-3
razor
techphoria414
quelle
quelle
Antworten:
Es gibt einen neuen Konfigurationsabschnitt, in dem auf Namespaces für Razor-Ansichten verwiesen wird.
Öffnen Sie die
web.config
Datei in IhremViews
Ordner und stellen Sie sicher, dass sie Folgendes enthält:Alternativ können Sie Ihrem freigegebenen Layout mithilfe von Anweisungen hinzufügen:
Starten Sie Visual Studio nach dem Bearbeiten der Datei Web.config neu, um die Änderungen zu übernehmen.
quelle
Copy Local = true
. Externe Baugruppen funktionieren möglicherweise nicht anders.Ich hatte das gleiche Problem: MVC3-Projekt MyCore.Web verwies auf den Namespace MyCore.DBLayer aus einem anderen Projekt in derselben Lösung (mit dem Assemblynamen MyCoreDBLayer). Alle Objekte aus MyCore.DBLayer funktionierte perfekt in Controller und Modelle aber in Razor Ansichten mit einem Fehler fehlgeschlagen ‚Der Typ oder Namespace - Name‚DBLayer‘existiert nicht im Namensraum‚MyCore‘(möglicherweise fehlt ein Assemblyverweis?)‘ , Die wurde offensichtlich nicht der Fall.
Durch Hinzufügen einer Assemblyreferenz zum Abschnitt system.web / compilation / Assemblys der Root-Datei web.config wurde das Problem behoben. Der Abschnitt sieht jetzt so aus:
Das Weglassen von Version, Kultur und Token war vorerst in Ordnung, sollte aber in Zukunft behoben werden.
quelle
Views/web.config
und es hat funktioniert, als es auch dort platziert wurde.In meinem Fall war das separate Projekt, das den Namespace enthielt, eine Konsolenanwendung. Das Ändern in eine Klassenbibliothek hat das Problem behoben.
quelle
Keiner der oben genannten Punkte hat auch für mich funktioniert.
Aber ich habe endlich etwas gefunden, das für mich funktioniert hat:
Dies lag daran, dass meine Build-Ausgabe für die Debug-Konfiguration in bin \ Debug \ und für die Release-Konfiguration in bin \ Release \ ging. Sobald ich die Build-Konfiguration für alle Konfigurationen in "bin \" geändert habe (siehe Abbildung unten), funktionierte alles wie gewünscht !!!
Ich habe keine Ahnung, warum das Aufteilen Ihrer Builds in Release- und Debug-Ordner dazu führen sollte, dass die Razor-Syntax unterbrochen wird, aber es scheint, dass etwas die Assemblys nicht finden konnte. Für mich sind die Projekte, bei denen Probleme mit der Rasierersyntax auftraten, meine Projekte für die "Rasiererbibliothek". Sie sind als Anwendungsprojekte festgelegt, ich verwende sie jedoch als Klassenbibliotheken mit RazorGenerator, um meine Ansichten zu kompilieren. Als ich tatsächlich versuchte, eines dieser Projekte direkt auszuführen, verursachte es den folgenden Konfigurationsfehler:
Dies führte mich zu dem Versuch, die Build-Ausgabe zu ändern, da ich feststelle, dass sich die Build-Ausgabe bei allen Webprojekten immer direkt im bin-Ordner befindet, im Gegensatz zum Standard für Klassenbibliotheken, die sowohl Release- als auch Debug-Ordner haben.
quelle
Sie scheinen nach dieser Antwort zu suchen: https://stackoverflow.com/a/4136773/176877
Öffnen Sie also die innere Ansicht \ Web.Config (NICHT die Stammansicht) und fügen Sie den Namespace unter dem Tag Pages hinzu:
Speichern Sie das, schließen Sie die Razor-Datei und öffnen Sie sie erneut.
Wenn Sie Bereiche verwenden, müssen Sie dies für jede Web.Config in jedem Bereich tun.
Visual Studio ist im Laufe der Jahre fehlerhafter geworden, sodass möglicherweise die Razor-Datei geschlossen werden muss, in der ein Debug-Build ausgeführt wird, und die Razor-Datei erneut geöffnet werden muss, oder im schlimmsten Fall ein Neustart von Visual Studio erforderlich ist. Letztendlich wird Ihnen die Razor-Datei jedoch so angezeigt, als ob sich alles in dieser Namespace-Liste in @ using-Anweisungen oben in all Ihren Ansichten befindet.
quelle
In ASP.NET Core MVC besteht die Lösung darin, eine
using
in _ViewImports.cshtml hinzuzufügen, anstatt sie web.config im Ordner View abzulegen, wenn Sie mit ASP.NET MVC 5 arbeiten._ViewImports.cshtml
Aussicht
quelle
Für mich bezog ich mich auf ein Projekt, das eine Konsolenanwendung war. Es wurde als exe (Konsolenanwendung) anstelle der Klassenbibliothek (DLL) erstellt. Als ich dies änderte, konnte ich die Modelle aus diesem separaten Projekt problemlos sehen.
quelle
Beim Versuch, Smo-Objekte in einer Razor-Ansicht zu verwenden, wurde der gleiche Fehler angezeigt. Anscheinend liegt dies daran, dass Razor die DLLs, auf die im Projekt verwiesen wird, nicht finden kann. Ich habe dieses Problem behoben, indem ich "Copy Local" für alle Smo-DLLs auf "true" gesetzt habe. Es gibt jedoch möglicherweise eine bessere Lösung (siehe Link von Czechdude oben). @ Using und web.config-Änderungen sind nutzlos, da sie nur benötigt werden, wenn Sie den Namespace weglassen möchten Teil von den Typnamen (zum Beispiel Server anstelle von Microsoft.SqlServer.Management.Smo.Server)
quelle
Ich habe einen ähnlichen Fehler erhalten, nachdem ich meine Entwicklungsmaschine von Win7 32bit auf Win7 64bit verschoben habe. Fehlermeldung:
...\Web\Views\Login.cshtml: ASP.net runtime error: [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from System.Web.WebPages.Razor, Version=1.0.0.0 ... Type B originates from ... Version=2.0.0.0
Es stellte sich heraus, dass ich beide Versionen im GAC hatte. Die Ansicht
web.config
verwies auf Version 1, aber die App verwies auf Version 2. Die referenzierten Assemblys wurden entfernt und v1 erneut hinzugefügt. vonSystem.Web.WebPages.Razor
usw.quelle
Nun, für mich war es anders. Mir fehlte die Zusammenstellung meines Konsolenanwendungsprojekts mit dem MVC-Projekt. Das Hinzufügen von Referenzen reichte also nicht aus.
Nun, das könnte jemand anderem helfen. Gehen Sie zur Root-Datei web.config
system.web
->compilation
-> fügen Sie Ihre Projektreferenz wie folgt hinzu.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
quelle
Ich hatte auch das gleiche Problem, aber das Problem war mit dem Ziel-Framework der Assembly .
Die Assembly, auf die verwiesen wird, befand sich in .NET Framework 4.6, wo das Projekt auf .NET Framework 4.5 festgelegt wurde.
Hoffe, dies wird jemandem helfen, der mit Frameworks durcheinander gebracht hat.
quelle
Der Name Ihres Projektordners muss identisch sein. Wenn Ihr Projekt- oder Lösungsname unterschiedlich ist, verletzt Sie MVC.
Beispiel: Wenn Sie eine neue Anwendung erstellen und diese den Standardnamen Webapplicaiton1 erhält, wird dieser Namespace erstellt. Nehmen wir also an, Sie möchten diesen Namespace nicht haben. Von VS aus ändern Sie sich also überall, wo Sie "MyNamespace" sehen können. Sie suchen und ersetzen auch den gesamten Code aus "Webapplication1" und ersetzen ihn durch "MyNamespace". Dadurch wird auch die Datei web.config geändert, sodass sie enthalten ist
Jetzt wird alles funktionieren, außer Razor-Ansichten.
RazorViews kann es nicht finden, da es eine seltsame Abhängigkeit vom FOLDERNAME des Projekts gibt. Es ist schreckliches Design.
Ich habe dies halb gründlich getestet, indem ich meine Dateien in eine neue Lösung kopiert habe. Der einzige Unterschied ist der Ordnername.
quelle
Versuchen Sie, den Namespace, in dem Sie sich
MyClasses
befinden, zur Datei web.config unter hinzuzufügen<pages> <namespaces></namespaces> </pages>
quelle
Schließen Sie den gesamten Namespace ein
quelle
Keine dieser https://stackoverflow.com/a/7597360/808128 funktioniert für mich. Sogar "Hinzufügen von Assembly-Referenzen zum Abschnitt system.web / compilation / Assemblys der Root-Datei web.config". Ich habe also zwei Möglichkeiten: 1) Hinzufügen einer öffentlichen Wrap-Klasse für meine Assembly, auf die Razor-Code über diesen Wrap auf diese Assembly zugreifen kann; 2) Fügen Sie einer öffentlichen Klasse in derselben Assembly, in der sich der Razor-Code befindet, einfach Assembly-Logik hinzu.
quelle
Zusätzlich zum Ändern der web.config für
<assemblies>
und<namespaces>
stellte ich fest, dass das GAC der Assembly einen großen Unterschied machte. Sie können Kultur- und Public-Key-Token wie jede global registrierte .NET-Kernassembly anwenden.Einige mögen bei der Erwähnung des GAC schaudern. Aber als BizTalk-Entwickler habe ich mich darauf eingestellt.
quelle
Diese Lösung hat bei mir funktioniert (Es ist lustig, funktioniert aber)
Ich habe die Ansichtsseiten bearbeitet und den Inhalt kopiert und eingefügt. Ich habe keinen Inhalt der Ansichten geändert, sondern nur bearbeitet, damit das Visual Studio die Seiten nachverfolgen kann, und danach hat alles funktioniert
Lösung - Bearbeiten Sie einfach die Seiten und ersetzen Sie sie durch dieselben Seiten (bei mir funktioniert)
quelle
Fügen Sie in Raumnamenmodellen, yourClassModel, public vor der Namensklasse hinzu
quelle
In meinem Fall bezog sich das Paket, das ich verwenden wollte, auf .net Standard 2.1, während mein Projekt für die Rasiermesserklassenbibliothek auf 2.0 festgelegt war
quelle