111 votes

La vue basée sur le rasoir ne voit pas les assemblys référencés

Je suis d'essayer de créer un fortement typées vue basée sur une classe d'une autre assemblée. Pour quelque raison que ce soit bien, mon Rasoir vue ne semble pas avoir toute la visibilité des autres assemblys référencés sur mon projet. par exemple

@model MyClasses.MyModel

les résultats dans l'erreur dans Visual Studio 2010, "le type ou Le nom d'espace de noms MyClasses n'a pas pu être trouvée (vous manque une directive using ou une référence d'assembly?)."

La même classe référencé dans la vue standard moteur fonctionne très bien. J'ai le même problème en essayant de référence de la classe dans le corps de mon point de vue.

Ai-je raté quelque chose au sujet de Rasoir ou dois-je besoin de faire référence à l'assemblée d'une autre façon?

111voto

qes Points 11681

Une nouvelle section de configuration est utilisée pour référencer les espaces de noms pour les vues Razor.

Ouvrez le fichier web.config dans votre dossier Views et assurez-vous qu’il contient les éléments suivants:

 <configuration>
    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
            <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
    </configSections>

    <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add namespace="System.Web.Mvc" />
                <add namespace="System.Web.Mvc.Ajax" />
                <add namespace="System.Web.Mvc.Html" />
                <add namespace="System.Web.Routing" />
                <add namespace="SquishIt.Framework" />
                <add namespace="Your.Namespace.Etc" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>
</configuration>
 

Vous pouvez également ajouter des instructions using à votre mise en page partagée:

 @using Your.Namespace.Etc;
<!DOCTYPE html>
<head>
....
 

ÉDITER: après avoir modifié Web.config, redémarrez Visual Studio pour appliquer les modifications.

60voto

V.B. Points 1211

J'ai eu le même problème: MVC3 Projet MyCore.Web, référencement à MyCore.DBLayer espace de noms à partir d'un autre projet dans la même solution (avec le nom de l'assembly MyCoreDBLayer). Tous les objets de MyCore.DBLayer a parfaitement fonctionné dans les Contrôleurs et les Modèles, mais pas dans de Rasoir points de vue avec une erreur "Le type ou le nom d'espace de noms 'DBLayer" n'existe pas dans l'espace de noms 'MyCore' (vous manque une référence d'assembly?)' ce qui n'est évidemment pas le cas.

  • Copie Locale de l'option est définie sur true.
  • L'ajout de "à l'aide..." Rasoir vues était inutile
  • Ajout d'espaces de noms system.web.les pages web.rasoir section était inutile ainsi

L'ajout de l'assemblée referecene du système.web/compilation/assemblées de section de la racine web.fichier de configuration fixe de la question. La section ressemble maintenant à:

<system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        **<add assembly="MyCoreDBLayer" />**
      </assemblies>
    </compilation>
...
</system.web>

L'omission de la version, de la culture, jeton a été OK pour le moment, mais devrait être résolu dans l'avenir.

16voto

Sylvia J Points 243

Aucun des ci-dessus a fonctionné pour moi non plus;

  • Dll ont été mis à la Copie Locale
  • Ajout d'espaces de noms à la fois sur internet.les configs n'a rien fait
  • Ajout des références d'assembly system.web\compilation\, les assemblages de ne pas aider (bien que je n'ai pas supprimé ces références, il peut donc être qu'ils sont nécessaires aussi)

Mais j'ai enfin trouvé quelque chose qui a fonctionné pour moi:

C'était parce que j'avais ma Sortie de la construction va bin\Debug\ pour la configuration de Débogage et bin\Release\ pour la Libération configuations. Dès que j'ai changé de Construire la Configuration de "bin\" pour Tous les configuations (conformément à l'image ci-dessous) alors que tout a commencé à travailler comme il se doit!!!

Build Configuration

Je n'ai aucune idée pourquoi, séparer vos constructions en Release et Debug des dossiers devrait provoquer la syntaxe Razor à briser, mais il semble que quelque chose ne pouvais pas trouver les assemblées. Pour moi, les projets qui ont eu la syntaxe razor questions sont effectivement mon rasoir bibliothèque de projets. Ils sont définis comme des Projets d'Application, cependant je les utiliser comme des bibliothèques de classe avec RazorGenerator pour compiler mon point de vue. Quand j'ai essayé d'exécuter l'un de ces projets, il a causé la suite à erreur de Configuration:

Impossible de charger le fichier ou l'assembly 'Système.Web.Aides, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ou une de ses les dépendances. Le système ne peut pas trouver le fichier spécifié.

Cela me conduire à essayer de changer la Sortie de la construction, comme je l'ai remarquer que pour tous les projets web de la Sortie de la construction semble toujours être directement dans le dossier bin, à la différence de la valeur par défaut pour la catégorie bibliothèques, qui ont à la fois des release et debug des dossiers.

8voto

Chris Moschini Points 7278

Vous semblez chercher la meilleure réponse ici: Razor HtmlHelper Extensions Not Found

En d’autres termes, ouvrez le fichier Views \ Web.Config (PAS la racine), et ajoutez l’espace-noms sous la balise Pages. Fermez et rouvrez ensuite le fichier.

2voto

Zar Shardan Points 1305

J'avais la même erreur en essayant d'utiliser Smo objets dans un Rasoir vue. Apparemment, c'est parce que le Rasoir ne pouvez pas trouver la Dll référencé dans le projet. J'ai résolu ce problème en définissant "Copie Locale" true pour tous les Smo dll, mais il pourrait être une meilleure solution (voir Czechdude du lien ci-dessus) @l'aide et le web.config modifications sont inutiles parce qu'ils ne sont nécessaires que si vous souhaitez omettre l'espace de noms de la partie de la catégorie des noms (par exemple, Serveur à la place de Microsoft.SqlServer.De la gestion.Smo.Serveur)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X