J'essaie de créer une vue fortement typée basée sur une classe d'un autre assemblage. Pour une raison quelconque, ma vue Razor ne semble pas avoir de visibilité sur les autres assemblys référencés dans mon projet. par exemple
@model MyClasses.MyModel
entraîne l'erreur dans Visual Studio 2010, «Le type ou le nom de l'espace de noms MyClasses
est introuvable (vous manque une directive using ou une référence d'assembly?)».
La même classe référencée dans le moteur de vue standard fonctionne correctement. J'ai le même problème en essayant de référencer la classe dans le corps de ma vision.
Est-ce que je manque quelque chose à propos de Razor ou dois-je référencer l'assemblage d'une autre manière?
asp.net-mvc
asp.net-mvc-3
razor
Nickwesselman
la source
la source
Réponses:
Une nouvelle section de configuration est utilisée pour référencer les espaces de noms pour les vues Razor.
Ouvrez le
web.config
fichier dans votreViews
dossier et assurez-vous qu'il contient les éléments suivants:Vous pouvez également ajouter des instructions using à votre mise en page partagée:
Après avoir modifié le Web.config, redémarrez Visual Studio pour appliquer les modifications.
la source
Copy Local = true
. Les assemblages externes peuvent ne pas fonctionner autrement.J'ai eu le même problème: MVC3 Project MyCore.Web faisait référence à l'espace de noms MyCore.DBLayer d'un autre projet dans la même solution (avec le nom d'assembly MyCoreDBLayer). Tous les objets de MyCore.DBLayer fonctionnaient parfaitement dans les contrôleurs et les modèles mais échouaient dans les vues Razor avec une erreur `` Le type ou le nom d'espace de noms 'DBLayer' 'n'existe pas dans l'espace de noms' MyCore '(vous manquez une référence d'assemblage?)' Qui était évidemment pas le cas.
L'ajout de l'assembly referecene à la section system.web / compilation / assemblies du fichier racine web.config a résolu le problème. La section ressemble maintenant à:
Omettre la version, la culture et le jeton était acceptable pour le moment, mais devrait être corrigé à l'avenir.
la source
Views/web.config
et cela a fonctionné quand il a été placé là aussi.Dans mon cas, le projet séparé qui contenait l'espace de noms était une application console. Le changer en une bibliothèque de classes a résolu le problème.
la source
Aucun de ces éléments n'a fonctionné pour moi non plus;
Mais j'ai finalement trouvé quelque chose qui a fonctionné pour moi:
C'était parce que ma sortie de construction allait dans bin \ Debug \ pour la configuration de débogage et bin \ Release \ pour les configurations de version. Dès que j'ai changé la configuration de construction en "bin \" pour toutes les configurations (comme sur l'image ci-dessous), tout a commencé à fonctionner comme il se doit !!!
Je n'ai aucune idée de la raison pour laquelle la séparation de vos versions dans les dossiers Release et Debug devrait entraîner une rupture de la syntaxe de Razor, mais cela semble être dû au fait que quelque chose n'a pas pu trouver les assemblys. Pour moi, les projets qui avaient des problèmes de syntaxe de rasoir sont en fait mes projets de «bibliothèque de rasoirs». Ils sont définis comme des projets d'application, mais je les utilise comme bibliothèques de classes avec RazorGenerator pour compiler mes vues. Lorsque j'ai essayé d'exécuter directement l'un de ces projets, cela a provoqué l'erreur de configuration suivante:
Cela m'a conduit à essayer de modifier la sortie de construction, car je remarque que pour tous les projets Web, la sortie de construction semble toujours être directement dans le dossier bin, contrairement à la valeur par défaut pour les bibliothèques de classes, qui ont à la fois des dossiers de publication et de débogage.
la source
Vous semblez rechercher cette réponse: https://stackoverflow.com/a/4136773/176877
Autrement dit, ouvrez les vues internes \ Web.Config (PAS la racine) et ajoutez l'espace de noms sous la balise Pages:
Enregistrez-le, puis fermez et rouvrez le fichier Razor.
Si vous utilisez des zones, vous devrez le faire pour chaque Web.Config de chaque zone.
Visual Studio est devenu plus buggué au fil des ans, il peut donc nécessiter la fermeture du fichier Razor en exécutant une version de débogage, puis la réouverture du fichier Razor, ou dans le pire des cas, le redémarrage de Visual Studio. Mais en fin de compte, il vous présentera le fichier Razor comme si tout dans cette liste d'espaces de noms se trouvait dans des instructions @using en haut de toutes vos vues.
la source
Dans ASP.NET Core MVC, la solution consiste à ajouter un
using
dans _ViewImports.cshtml, au lieu de le placer web.config dans le dossier View lorsque vous travaillez avec ASP.NET MVC 5._ViewImports.cshtml
Vue
la source
Pour moi, je faisais référence à un projet qui était une application console. Il a été configuré pour être construit en tant qu'exe (application console) au lieu de bibliothèque de classes (DLL). Lorsque j'ai changé cela, j'ai pu voir les modèles de ce projet séparé sans problème.
la source
J'obtenais la même erreur en essayant d'utiliser des objets Smo dans une vue Razor. Apparemment, c'est parce que Razor ne trouve pas les DLL référencées dans le projet. J'ai résolu ce problème en définissant "Copy Local" sur true pour toutes les dll Smo, mais il pourrait y avoir une meilleure solution (voir le lien de Czechdude ci-dessus) Les modifications @using et web.config sont inutiles car elles ne sont nécessaires que si vous souhaitez omettre l'espace de noms partie des noms de type (par exemple Server au lieu de Microsoft.SqlServer.Management.Smo.Server)
la source
J'obtenais une erreur similaire après avoir déplacé ma machine de développement de Win7 32bit vers Win7 64bit. Message d'erreur:
...\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
Il s'avère que j'avais les deux versions dans le GAC. La vue
web.config
faisait référence à la v1, mais l'application faisait référence à la v2. Suppression des assemblys référencés et ré-ajout de la v1. deSystem.Web.WebPages.Razor
, etc.la source
eh bien, pour moi, c'était différent. Il me manquait l'assemblage de mon projet d'application console avec le projet MVC. Donc, ajouter une référence n'était pas suffisant.
bien cela pourrait aider quelqu'un d'autre. allez dans le fichier racine web.config
system.web
->compilation
-> ajoutez la référence de votre projet comme ceci.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
la source
J'ai également eu le même problème, mais le problème était avec le cadre cible de l'assemblage .
L'assembly référencé était dans .NET Framework 4.6 où le projet a été défini sur .NET Framework 4.5.
J'espère que cela aidera quelqu'un qui a gâché les cadres.
la source
Le nom de votre dossier de projet doit être le même. Si le nom de votre projet ou de votre solution est différent, MVC vous fera du mal.
Exemple: si vous créez une nouvelle application et qu'elle obtient le nom par défaut Webapplicaiton1, cet espace de noms sera créé. Alors, disons que vous ne voulez pas avoir cet espace de noms, donc à partir du VS, vous changez partout où vous pouvez voir "MyNamespace". Vous recherchez et remplacez également tout le code de "Webapplication1" et le remplacez par "MyNamespace". Cela modifie également le fichier web.config, de sorte qu'il inculdes
Maintenant, tout fonctionnera, sauf les vues Razor.
RazorViews ne peut pas le trouver, car il existe une sorte de dépendance étrange sur le FOLDERNAME du projet. C'est un design terrible.
J'ai testé cela de manière semi-approfondie en copiant mes fichiers dans une nouvelle solution, et la seule différence est le nom du dossier.
la source
Essayez d'ajouter l'espace de noms
MyClasses
dans lequel vous vous trouvez au web.config sous<pages> <namespaces></namespaces> </pages>
la source
inclure tout l'espace de noms
la source
Aucun de ces https://stackoverflow.com/a/7597360/808128 ne fonctionne pour moi. Même "l'ajout de l'assembly referecene à la section system.web / compilation / assemblies du fichier racine web.config". Il me reste donc les deux méthodes suivantes: 1) ajouter une classe d'encapsulation publique pour mon assembly à laquelle le code Razor peut accéder à cet assembly via ce wrapping; 2) ajoutez simplement la logique d'assembly à une classe publique dans le même assembly où se trouve le code du Razor.
la source
En plus d'apporter des modifications à web.config pour
<assemblies>
et<namespaces>
, j'ai trouvé que GAC'assembler faisait une grande différence. Vous pouvez appliquer la culture et le jeton de clé publique comme n'importe quel assembly .NET principal inscrit globalement.Certains peuvent frémir à la mention du GAC. Mais en tant que développeur BizTalk, j'ai grandi pour l'adopter.
la source
Cette solution a fonctionné pour moi (c'est drôle, mais ça marche)
J'ai édité les pages de vue et copié le contenu et collé dedans, je n'ai changé aucun contenu des vues, mais juste édité pour que le studio visuel puisse faire son truc pour suivre les pages, et ensuite tout a commencé à fonctionner
Solution - Il suffit de modifier les pages et de les remplacer par les mêmes pages (a fonctionné pour moi)
la source
dans les modèles spacename, yourClassModel, ajoutez public avant name class
la source
Dans mon cas, le package que j'ai essayé d'utiliser faisait référence à la norme .net 2.1 alors que mon projet de bibliothèque de classes razor était défini sur 2.0
la source