web-dev-qa-db-fra.com

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

La solution Buiding MVC3 s’est bien déroulée, mais une erreur s’est produite dans le navigateur:

Message d'erreur du compilateur: CS0234: Le type ou le nom de l'espace de noms 'Html' n'existe pas dans l'espace de noms 'System.Web.Mvc' (il 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 NuGet et les ai configurés pour tous les projets MVC3. Est-ce que MVC3 inclut les bibliothèques System.Web.Mvc.Ajax, System.Web.Mvc.Html et autres? Pourquoi est-ce que je reçois 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>
213
J.Olufsen

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 noeud 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, définissez la propriété Copy Local sur True ou False.
418
Toffee

Pour une raison quelconque, deux de mes solutions ont des projets Web qui ont désinstallé spontanément asp.net MVC. Je l'ai installé à partir de Nuget et maintenant, ils travaillent à nouveau. Cela s'est produit après la mise à jour récente d'un lot de mises à jour Windows comprenant des mises à jour .net Framework pour la version que j'utilisais (4.5.1).

Edit: Du blog de développement et outils Web .Net:

Microsoft Asp.Net MVC Security Update MS14-059 a brisé ma construction!

60
Chris

Celui-ci m'attrape normalement lorsque j'exécute à partir de IIS et que le pool d'applications du 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é, cliquez avec le bouton droit sur votre projet Web, accédez à exécutez-le sous la bonne version de .NET . Sous IIS, vérifiez la version .NET de votre pool d'applications.

Pour faire suite à mon dernier commentaire sur la création du projet, avez-vous correctement inclus les assemblages, comme indiqué 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>
38
BlackSpy

Vous devez mettre à jour MVC.

  1. Allez dans Outils -> Gestionnaire de paquets NuGet -> Gérer les paquets NuGet pour la solution
  2. Cliquez sur "Mises à jour"
  3. Mettre à jour "Microsoft ASP.NET MVC"
  4. Reconstruire la solution
30
Matt

J'ai eu le même problème - mon scénario était que je faisais référence à la nouvelle 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 ne contenait pas les espaces de noms corrects (HTML, Ajax, etc.) et me renvoyait l'erreur d'exécution.

28
Peter Munnings

Ma solution était sous Gérer les paquets Nuget pour la solution ... - J'ai eu beaucoup de mises à jour à faire pour un certain nombre de paquets.

Permettez-moi de revenir en arrière et de dire que je me suis fait avoir parce que je déplaçais la solution et les projets d'un dossier à un autre ... les choses étaient donc déjouées par rapport à l'endroit où les projets l'avaient prévu. Tout a très bien fonctionné, mais apparemment, Nuget devient confus, à moins que vous n'utilisiez une approche différente de celle que j'ai utilisée.

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

Tout était revenu à la normale et heureux.

16
azarc3

J'ai téléchargé un projet MVC 5 et la question incriminante 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 ai essayé un nettoyage et quelques choses ci-dessus etc ... 

Ce qui a fonctionné pour moi était juste 

Manage Nuget and Update all the packages.  Then it worked fine.
9
Tom Stickel

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

update-package Microsoft.aspnet.mvc -reinstall
6
user1477388

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

Aucune des solutions ci-dessus ne fonctionnait 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éer-un-Clean-Minimal-Footprint-ASP-NET-WebAPI ) lorsque j'ai rencontré ce problème.

Ce qui a bien fonctionné pour moi, c’est d’ajouter explicitement "System.Web.Mvc" aux références de mon application, même si celle-ci faisait déjà référence à "System.Web". 

6
Sean

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 règle "Copier local" sur "true" pour la référence System.Web.Mvc, il le 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 provoqué 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 => ajoutez-la à nouveau

Cela a résolu le problème pour moi ... je l'espère 

4
bohem.be

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

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

Cependant, après cela, le chemin de référence dans le Still Csproj 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>

Changé 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.

3
Valamas

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

3
Rob Bowman

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

2
Andrey Mykhaylov

J'ai fait quelque chose de vraiment stupide (et peut-être que vous avez 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. Je n'ai pas lu mon message d'erreur aussi bien. J'ai donc interprété mon erreur comme la classe Html n'existe pas dans l'espace de noms System.Web.Mvc et c'est ainsi fini ici (stupide je sais). 

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

2
Jared Beach

J'ai eu le même problème, mais dans mon cas a été créé par un autre facteur. J'écris ceci pour aider d'autres personnes avec 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 dans lesquels nous contrôlions la version utilisée. Pour une raison quelconque, une des références de projet va à GAC et pointe vers la dll GAC (version 4.0.0.1) et le programme a 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.

1
freedeveloper

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

ça résoudra

1
Ramakrishna

J'ai eu ce problème, régler la copie locale sur et en dehors, etc. ne fonctionnait pas . Le projet n'utilisait pas de nuget, des correctifs autour de ce problème étaient également hors de question.

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

Je pense que cela deviendra plus une solution pour les gens à mesure que le framework .net continue de progresser et que les utilisateurs ne disposent pas des anciennes versions de MVC.

1
4imble

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

1
andre719mv

Il est probable que régler votre DLL sur CopyLocal/true ou l'un des autres correctifs majeurs corrigera votre problème, mais voici un autre cas Edge qui m'a intercepté pendant 20 minutes.

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

  <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>
1
Moby's Stunt Double

Ok, beaucoup de gens semblent vivre ce problème. Mon problème était dû aux références ayant des chemins d'accès aux dossiers bin d'autres projets ou à la référence à des 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 faire référence à 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 tous les paquets qui n'étaient pas sur NuGet, j'ai créé un autre dossier à côté des paquets et y ai placé la dll de la même manière que NuGet.

Je devais également parcourir les fichiers de configuration et m'assurer que la version correcte des packages était utilisée. Un processus long et douloureux!

1
John

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

0
Mark Good

J'ai eu le même problème, aucune des solutions ne fonctionnait pour moi, Enfin, j'ai retiré le System.Web.MVC et ajouté à nouveau. Tout était rentré dans l'ordre et mon problème était résolu. 

0
Sirwan Afifi