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>
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.
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!
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>
Vous devez mettre à jour MVC.
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.
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.
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.
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
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".
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
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.
Pour moi, la solution était de s’assurer que tous les projets étaient construits pour le même processeur - dans mon cas, x86
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.
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.
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.
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
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.
J'ai supprimé System.Web.dll du dossier Bin de mon site.
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>
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!
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.
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.