Le nom de type ou d'espace de noms n'existe pas dans l'espace de noms 'System.Web.Mvc'

217

La solution Buiding MVC3 s'est bien passée mais a une erreur dans le navigateur:

Message d'erreur du compilateur: CS0234: le nom de type ou d'espace de noms «Html» n'existe pas dans l'espace de noms «System.Web.Mvc» (vous manque une référence d'assembly?)

Source Error:
Line 25:         <add namespace="System.Web.Mvc" />
Line 26:         <!--<add namespace="System.Web.Mvc.Ajax" />-->
Line 27:         <add namespace="System.Web.Mvc.Html" />
Line 28:         <add namespace="System.Web.Routing" />
Line 29:         <add namespace="System.Web.WebPages" />

J'ai installé des paquets pour la solution avec NuGetet configuré pour tous les projets MVC3. Est-ce que MVC3comprennent les bibliothèques System.Web.Mvc.Ajax, System.Web.Mvc.Htmlet d' autres? Pourquoi est-ce que j'obtiens l'erreur?


Dans le dossier Références, j'ai System.Web.Mvc

Runtime version: v4.0.30319,

Version: 3.0.0.0

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <machineKey compatibilityMode="Framework45" />
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportStore;Integrated Security=True;Pooling=False;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

MSDN l'espace de noms System.Web.Mvc

fichier packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0-rc" />
  <package id="jQuery" version="1.7.2" />
  <package id="jQuery.UI.Combined" version="1.8.11" />
  <package id="jQuery.Validation" version="1.9" />
  <package id="Microsoft.AspNet.Mvc" version="3.0.20105.1" />
  <package id="Microsoft.AspNet.Providers.Core" version="1.0" />
  <package id="Microsoft.AspNet.Providers.LocalDB" version="1.0" />
  <package id="Microsoft.AspNet.Razor" version="1.0.20105.408" />
  <package id="Microsoft.AspNet.WebPages" version="1.0.20105.408" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Modernizr" version="2.0.6" />
  <package id="Moq" version="4.0.10827" />
  <package id="Ninject" version="3.0.1.10" />
</packages>
J.Olufsen
la source
1
quel est votre serveur web? est-ce dans iis?
Daniel A. White
Express IIS dans Visual Studio 2012
J.Olufsen
1
quel est l'objectif de votre projet?
Daniel A. White
2
Cela dépend de qui a posé cette question - c'est tout ce qui est nécessaire pour certains d'entre nous Gérer les packages Nuget pour la solution ... >> Mises à jour
Tom Stickel

Réponses:

420

Nettoyez votre solution, puis définissez la propriété de ces fichiers sur Copy Local = True.

Pour définir la propriété Copy Local sur True ou False

Dans l'Explorateur de solutions, cliquez sur le bouton Afficher tous les fichiers pour afficher le nœud Références.

  • Ouvrez le nœud Références pour le projet.
  • Cliquez avec le bouton droit sur une référence dans la liste Références, puis cliquez sur Propriétés. Les propriétés associées à cette référence apparaissent dans une liste dans la fenêtre Propriétés.
  • Dans la fenêtre Propriétés, modifiez la propriété Copier local sur Vrai ou Faux.
Caramel au beurre
la source
11
Impressionnant! Cela m'a corrigé sur un projet MVC4. C'est assez évident quand on y pense. Je n'ai jamais regardé le projet déployé pour voir si les DLL étaient là.
Alex Kilpatrick
1
Merci! Cela m'a aussi aidé!
Maritim
1
De rien. Parfois, des problèmes complexes sont résolus par une solution simple. :)
Toffee
5
Ça marche! Je change juste une seule référence =>System.Web.Mvc
Jaider
5
Cela m'a pris un peu de temps pour comprendre ce que "ces fichiers" signifiaient. Parcourez les références d'assembly sur chaque projet de la solution, tout ce qui contient "Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies" ou similaire dans le chemin d'accès fait partie du problème.
Tâche
60

Pour une raison quelconque, DEUX de mes solutions ont des projets Web qui ont désinstallé spontanément asp.net MVC d'une manière ou d'une autre. Je l'ai installé depuis Nuget et maintenant ils fonctionnent tous les deux à nouveau. Cela s'est produit après un récent lot de mises à jour Windows qui comprenait des mises à jour du framework .net pour la version que j'utilisais (4.5.1).

Modifier: à partir du blog de développement et d'outils Web .Net:

La mise à jour de sécurité Microsoft Asp.Net MVC MS14-059 a cassé ma version!

Chris
la source
4
Cela m'est juste arrivé. Cependant, j'ai mis à jour mes packages MVC au lieu de les réinstaller (les miens étaient obsolètes de toute façon). Y a-t-il une source ou une raison pour laquelle cela s'est produit?
Joshua H
5
Cela semble être lié à KB2994379 ou KB2992080 , selon la version de MVC à laquelle vous faites référence (5.1 et 5.0 respectivement). La mise à jour fournit une nouvelle version de System.Web.Mvc qui, je présume, introduit un conflit de version. La mise à jour de votre package MVC corrigera l'erreur. Si vous ne pouvez pas mettre à jour pour une raison quelconque, vous devrez définir le System.Web.Mvc.dll pour être copié localement.
Vinney Kelly
1
J'ai eu le même problème. Mettez à jour le package et définissez copy local = true. Merci tout le monde!!!!
Vackup
1
MVC Copy local = true +1.
Stanomatic
4
La même chose m'est arrivée. J'ai dû configurer MVC pour copier local = FALSE, reconstruire, copier local = TRUE, reconstruire. Tout bon.
Jeppebm
38

Celui-ci m'attrape normalement lorsque j'exécute à partir d'IIS et que le pool d'applications pour le site par défaut est défini sur .NET version 2.0. Lorsque vous utilisez IIS à partir de Visual Studio, il crée un répertoire virtuel mais s'exécute toujours sous le pool d'applications du site par défaut. Si vous utilisez le serveur Web intégré, faites un clic droit sur votre projet Web, accédez aux propriétés et assurez-vous de l'exécuter sous la bonne version de .NET. Sur IIS, vérifiez la version .NET de votre pool d'applications.

Suite à mon dernier commentaire sur la façon dont le projet a été créé - incluez-vous correctement les assemblys, comme ci-dessous (extrait du fichier web.config par défaut généré par le modèle de projet MVC3 dans VS10):

<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" />
      </assemblies>
</compilation>
BlackSpy
la source
2
Tous les projets configurés pour utiliser .NET Framework 4.5. Cela signifie-t-il que .NET 4.5 ne peut pas trouver System.Web.Mvc.Ajax et d'autres classes?
J.Olufsen
Normalement, cela signifie qu'il est configuré pour s'exécuter en tant que 4.5 mais s'exécute en fait comme autre chose, ce qui signifie qu'il ne peut pas trouver System.Web.Mvc.Ajax dans System.Web.Mvc.
BlackSpy
En passant, quelle est votre version de System.Web.dll? La raison pour laquelle je demande est que vous avez dit que vous avez ajouté les assemblys de NuGet - n'avez-vous pas créé un projet Web MVC3?
BlackSpy
31

Vous devez mettre à jour MVC.

  1. Accédez à Outils -> Gestionnaire de packages NuGet -> Gérer les packages NuGet pour la solution
  2. Cliquez sur "Mises à jour"
  3. Mettre à jour «Microsoft ASP.NET MVC»
  4. Reconstruire la solution
Mat
la source
1
L'utilisation du package NuGet est bonne, mais vous pouvez télécharger une tonne d'autres assemblages qui peuvent ne pas être nécessaires, mais cela le corrigera.
Canvas
1
Eu le même problème, avoir une prime.
Nit
28

J'ai eu le même problème - mon scénario était que je référençais le nouveau System.Web.Mvc.dll à partir d'un dossier lib et je n'avais pas "Copy Local" défini sur true. L'application revenait alors à la version du GAC qui n'avait pas les bons espaces de noms (Html, Ajax, etc.) et me donnait l'erreur d'exécution.

Peter Munnings
la source
16

Ma solution était sous Gérer les paquets Nuget pour la solution ... - J'avais énormément de mises à jour à faire pour pas mal de paquets.

Permettez-moi de reculer d'un demi-pas et de dire que je me suis foutu parce que j'ai déplacé la solution et les projets d'un dossier à un autre ... donc les choses étaient déjà hors de contrôle par rapport à ce que les projets pensaient. Tout s'est bien passé, mais apparemment Nuget devient confus à moins que vous n'utilisiez une approche différente de la mienne.

Retour à la solution ... Je suis simplement allé à Gérer les packages Nuget pour la solution ... >> Mises à jour >> Microsoft et .NET et appuyez sur le bouton Tout mettre à jour .

Tout était revenu à la normale et heureux.

azarc3
la source
J'ai posté une solution du même type après avoir accidentellement sauté votre message +1 pour vous
Tom Stickel
C'était aussi la solution pour moi.
bradj
Notez que vous devrez peut-être également mettre à jour JQuery et Bootstrap après avoir fait cela
Carl Onager
La mise à jour des packages de nuget mvc, razor et pages Web a fonctionné pour moi sur un projet MVC5.
voam
9

J'ai téléchargé un projet mvc 5 et le problème incriminé pointant vers

<add namespace="System.Web.Mvc.Ajax" />  

Avec ce message d'erreur:

CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

-> dans lequel je suis venu sur cette page Web et j'ai essayé un nettoyage et quelques choses ci-dessus, etc.

Ce qui a fonctionné pour moi, c'était

Manage Nuget and Update all the packages.  Then it worked fine.
Tom Stickel
la source
1
Oh, je vais laisser mon message, mais je vois que azarc3 dit la même chose. le voter.
Tom Stickel
7

L'exécution de la commande suivante dans le gestionnaire de packages nuget l'a corrigé pour moi:

update-package microsoft.aspnet.mvc -reinstall
user1477388
la source
2
Cela doit être voté un millier de fois de plus.
Chazt3n
1
@ Chazt3n N'a pas fonctionné pour moi, mais c'est une bonne suggestion donc + 1
Jared Beach
J'ai essayé toutes les autres méthodes, et en utilisant techniquement le gestionnaire de paquets, j'ai désinstallé et réinstallé et mis à jour et quoi d'autre. J'étais donc pessimiste à propos de cette réponse, mais désespérée. Cela a fonctionné d'une manière ou d'une autre.
Mahesh
6

Cette réponse est assez tardive compte tenu de la date de la question, mais quelqu'un peut la trouver utile.

Aucune des solutions ci-dessus n'a fonctionné pour moi dans Visual Studio 2012 sur un projet local, Net Framework 4.5 MVC 4. Pour le contexte, je suivais un tutoriel sur la création d'une API Web barebones sur CodeProject ( http://www.codeproject.com/ Articles / 615805 / Création-d'une-empreinte minimale propre-ASP-NET-WebAPI ) lorsque j'ai rencontré ce problème.

Ce qui a fonctionné pour moi a été d'ajouter explicitement "System.Web.Mvc" aux références de mon application, même si l'application faisait déjà référence à "System.Web".

Sean
la source
Merci. Cela a résolu mon problème (bien que ce soit avec DevExpress.Web.Mvc)
dferraro
+1. J'utilise MvcSiteMapProvider et comme il ne fonctionne pas avec les derniers assemblys de MVC, je ne pouvais pas faire de "Tout mettre à jour" pour les packages Microsoft ASP.Net MVC via nuget. Une autre suggestion est que vous devez probablement faire un "CopyLocal = True" pour cet assemblage.
user007
Juste besoin de pousser l'application Web de débogage vers un nouvel environnement. Nécessaire pour ajouter "copier local" à la référence.
dudeNumber4
4

J'ai eu le même problème, mais rien de ce qui précède n'a fonctionné pour moi. Ils m'ont cependant mis dans la bonne direction.

Par exemple, lorsque je définit la valeur "Copier local" sur "true" pour la référence System.Web.Mvc, elle la redéfinit automatiquement sur False.

J'ai plusieurs projets qui dépendent de la référence System.Web.Mvc dans ma solution, mais un seul a causé ce problème. Dans VS 2012, cette référence est étiquetée avec le triangle d'attention jaune.

Trouvez cette référence => supprimez-la => rajoutez-la

Cela m'a arrangé. J'espère que cela t'aides

bohem.be
la source
3

Affichez et vérifiez les chemins de référence dans votre csproj.

J'avais supprimé les références à System.Web.Mvc (et autres) et les ai ajoutées à un chemin personnalisé. C:\Project\OurWebReferences

Cependant, après cela, le chemin de référence dans le csproj fixe n'a pas changé. ÉTAIT

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\OurWebProject\bin\Debug\System.Web.Mvc.dll</HintPath>
</Reference>

Modifié en manuellement

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\..\..\OurWebReferences\System.Web.Mvc.dll</HintPath>
</Reference>

Les chemins ne sont qu'un exemple.

Valamas
la source
3

Pour moi, la solution était de s'assurer que tous les projets étaient construits pour le même CPU - dans mon cas x86

Rob Bowman
la source
2

Copier Local = True a été résolu pour l'un de mes projets. Mais dans un autre projet, j'obtiens la même erreur, j'ai essayé de définir Copy Local = true, mais cela ne résout pas mon problème. Modification du cadre cible de 4.5.1 à 4.5 dans les propriétés du projet

Andrey
la source
2

J'ai fait quelque chose de vraiment stupide (et vous l'avez peut-être fait aussi).

J'essayais d'appeler System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html est un espace de noms et non une classe et je n'ai pas si bien lu mon message d'erreur, j'ai donc interprété mon erreur car la classe Htmln'existe pas dans l'espace de noms System.Web.Mvc et c'est ainsi que j'ai fini ici (stupide je sais).

Tout ce que j'avais à faire était d'ajouter une instruction using @using System.Web.Mvc.Htmlà ma page, puis de @Html.Partialtravailler comme prévu.

Plage de Jared
la source
Visual Studio 2015 marquera l'utilisation comme non nécessaire, mais si vous le laissez le supprimer, vous obtiendrez des erreurs telles que: "Le nom de type ou d'espace de noms 'Helpers' n'existe pas dans l'espace de noms 'Microsoft.Web' (vous manque une référence d'assemblage?) ".
justdan23
1

si l'un des éléments ci-dessus ne résout pas votre problème, définissez simplement les propriétés de System.Web.Mvc.dll pour copier la ture locale.

ça résoudra

Ramakrishna
la source
1

J'ai eu le même problème, mais dans mon cas, cela provenait d'un autre facteur. J'écris ceci pour aider d'autres personnes ayant le même problème. J'ai des solutions avec plusieurs projets. deux d'entre eux fonctionnent avec System.Web.Mvc, normalement notre référence pointait vers des packages externes où nous contrôlions la version utilisée. Pour une raison quelconque, l'une des références du projet va à GAC et pointe vers la dll GAC (version 4.0.0.1) et le programme a obtenu l'erreur. Pour le corriger:

Vérification simple si les références à System.Web.Mvc pointent vers la même DLL dans le même chemin de répertoire.

J'espère que cette aide.

développeur libre
la source
1

J'ai supprimé System.Web.dll du dossier Bin de mon site.

andre719mv
la source
im mon cas oui. Je passais à l'ancienne branche sans MVC. Et System.Web.dll dans le dossier Bin a cassé mon bild.
andre719mv
1

J'ai eu ce problème, mettre la copie locale sous et hors tension, etc. n'a pas fonctionné. Le projet n'utilisait pas de pépite, il était donc également impossible de corriger les problèmes.

La solution pour moi était d'installer MVC 3 (ce que j'ai fait via le programme d'installation de la plate-forme Web).

Je soupçonne que cela deviendra plus une solution pour les gens à mesure que le cadre .net continue de progresser et que les anciens MVC ne sont pas installés.

4imble
la source
1

Il est probable que définir votre DLL sur CopyLocal / true ou l'un des autres principaux correctifs pour cela résoudra votre problème, mais voici un autre cas de bord qui m'a pris pendant 20 minutes de temps perdu.

Lorsque vous ajoutez vos espaces de noms à votre Views / Web.config, assurez-vous qu'ils sont correctement placés dans le casse:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="THE.NameSpace" />
        <add namespace="THE.Namespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
Moby's Stunt Double
la source
1

Ok donc beaucoup de gens semblent rencontrer ce problème. Mon problème a été causé par des références ayant des chemins vers les dossiers bin d'autres projets ou par le référencement de DLL à partir de dossiers système. Le projet avait environ 6 ans et les développeurs précédents avaient décidé que c'était ainsi qu'ils allaient référencer leurs bibliothèques.

La solution consistait à parcourir chaque référence et à vérifier les chemins, puis à supprimer la référence et à l'ajouter à l'aide de NuGet. Pour tout package qui n'était pas sur NuGet, j'ai créé un autre dossier à côté des packages et y ai placé la DLL dans la même disposition que NuGet.

J'ai également dû parcourir les fichiers de configuration et m'assurer que la bonne version des packages était utilisée. Un processus long et douloureux!

John
la source
1

J'ai un projet qui le fait chaque fois que je crée avec la vue ouverte. Dès que j'ai fermé la vue, l'erreur disparaît et la construction réussit. Très étrange.

Mark Good
la source
0

J'ai eu le même problème, aucune des solutions n'a fonctionné pour moi, enfin j'ai supprimé le System.Web.MVCet ajouté à nouveau Ensuite, tout est revenu à la normale et mon problème a été résolu.

Sirwan Afifi
la source