Après la mise à jour de Windows “le type ou Le nom d'espace de noms 'Html' n'existe pas dans l'espace de noms du Système".Web.Mvc'”
J'ai fait une mise à jour de Windows et ensuite mon asp.net mvc 5 application ne sera plus la charge de se plaindre
CS0234: The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc'
indiquant que mon point de vue web.la config est la faute de
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="Ogre.Extensions" />
<add namespace="Newtonsoft.Json"/>
</namespaces>
</pages>
</system.web.webPages.razor>
Maintenant, c'est très déroutant. Dans mon projet, je peux voir la Html
espace de noms, de l'ouverture de mon assemblée en ILSpy je peux naviguer à la limite System.Web.Mvc
et j'ai peut-il ainsi, et la fusion du journal de montrer n'est pas suspect de liaison des erreurs.
C'est comme si juste mon point de vue arriver lié (avec succès) à une ancienne version de la Mvc. Pourquoi serait-ce jamais arrivé? Comment puis-je résoudre ce problème?
Laissez-moi être clair qu'il n'y a eu aucune configuration ou même des changements de code. C'est sur ma machine de dev sur IISExpress. Il a été en cours d'exécution, j'ai fait la mise à jour et redémarré et maintenant il n'est plus en cours d'exécution.
Voici mes dernières installations à partir de la mise à jour. J'ai pu commencer à les enlever un par un, mais je veux savoir ce qui se passe réellement mal car il se sent comme je suis partie manquante de l'histoire.
- Sont vos références de projet OK?
- oui, le projet s'appuie très bien et il n'y a pas cassé les références
- Votre pool d'application dans IIS n'est pas à utiliser .Net Framework 2, par hasard?
- c'est dans IISExpress toutes exécuté localement. Comme je l'ai dit, il y a eu aucune modification de la configuration entre courir et de ne pas en cours d'exécution.
- Je vais avoir le même problème avec IISExpress, impatients pour la réponse
- N'mise à jour de votre
<host>
factoryType à 5.1.0.0 changer quelque chose? - non, et techniquement, nous sommes toujours à l'aide de
5.0.0
donc, je serais surpris si il l'a fait.C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Mvc\v4.0_5.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll
certainement existe (comme le5.0.1
version) - C'est DONC lié stackoverflow.com/questions/26396489/...
- Il paraît qu'on peut avoir une épidémie? stackoverflow.com/questions/26407533/...
- peut-être liées, mais la réponse sommet sur il refait
System.Web.Mvc
à 4.0.0.1 dans le GAC, plutôt que de 5.0.0 dans mes packages nuget. Je ne veux pas que! - Oui, moi non plus 🙂 en Espérant trouver une solution au plus vite, merci pour la mise à jour de w/o guide de MS! :/
- Nous avons remarqué que notre Système.Web.Projet Mvc de référence a maintenant Copie Locale définie à False au lieu de True. Réglage de la Copie Locale de retour à Vrai résout le problème, mais n'explique pas pourquoi il a été changé après le patch. Nous disposons de plusieurs machines avec la mise à jour de sécurité et plusieurs sans. Dans tous les cas, ceux avec la mise à jour de l'ouverture de la solution (dans plusieurs branches de contrôle de code source) et de la Copie Locale est Faux. Pour ceux avec des non corrigés des machines de Copie Locale est définie à Vrai, comme il est dans le contrôle de source.
- Pour moi, Visual Studio, a déclaré la Copie Locale était
true
, mais il n'a pas fait de copier le fichier dans le dossier bin. J'ai dû modifier manuellement<Private>True</Private>
dans mon fichier de projet. - Heureux, il n'est pas juste moi. L'obtention de la construction de projets a été assez facile, réparer le site était irritant jusqu'à ce que j'ai remarqué que la Copie Locale est définie sur false. Particulièrement grand que tout a bien fonctionné sur le serveur de test, qui doit avoir mis à jour le GAC lui-même, je suppose, donc seulement vivre une effraction. Cheers MME Bien que dans l'ensemble, je préfère avoir des correctifs de sécurité, je suppose.
- Essayez d'installer/réparer les dernières versions de packages MSI de ASP.NET MVC de ici
- Connexes:
System.Web.MVC
pas copié àbin
dossier depuis MS14-059
Vous devez vous connecter pour publier un commentaire.
Holy crap, grâce à @Nevada-Williford pour l'astuce. Et la définition de mon
System.Web.Mvc
référence à<Private>True</Private>
(Copie Locale = True), il fixe. Notez que la mise à jour avant tout fonctionnait, après la mise à jour, j'ai dû modifier mon csproj à le faire fonctionner à nouveau.Travail de théorie sur ce qui se passe:
Copy Local = True
et<Private>True</Private>
utilisé presque, mais pas exactement la même chose. Le premier était un Visual Studio, ce dernier msbuild réglage. Si le msbuild paramètre est absent, Visual Studio serait appliquée (aussi longtemps que vous avez été dans VS). Dans cette mise à jour, je pense qu'ils ont changé de sorteCopy Local
reflète simplement la présence de l'attribut.Dans notre projet, nous n'avons pas d'attribut défini explicitement, mais
Copy Local = True
avant la mise à jourSystem.Web.Mvc.dll
est copié dans le répertoire bin. Après la mise à jour, puisque l'attribut est absentCopy Local
montreFalse
et vous êtes àTrue
pour vous assurer d'obtenir une copie locale.Réglage manuel de
Copy Local = True
(ou en ajoutant que l'élément xml à msbuild) résout le problème.Edit: Alors que cela semble être la réponse à la question spécifique, n'importe qui de venir ici devraient lire le fil de commentaires et d'autres réponses - surtout dmatson de l' - pour plus de contexte, de mises en garde, et les bugs liés.
System.Web.Mvc
, pasSystem.Mvc.Web
CopyLocal=true
ne nous a pas aidé; voir:System.Web.MVC
pas copié àbin
dossier depuis MS14-059Elle a été cassée pour tous les utilisateurs sans
CopyLocal=true
(ou, dans MSBuild parler,<Private>True</Private>
) par MS14-059. MVC modèles de faire ensemble<Private>True</Private>
par défaut, mais si vous utilisez NuGet pour mettre à jour le MVC version, vous perdez ce paramètre (voir NuGet le bug n ° 4344).Il y a deux aspects au problème:
Vous voyez le problème n ° 1. Pour résoudre ces deux problèmes, je vous recommande de faire les deux modifications suivantes:
Ajoutez la configuration suivante pour Vues\Web.config:
Ensemble
CopyLocal=true
dans le VS de l'INTERFACE utilisateur pour le projet de référence, ou manuellement ajouter la ligne suivante en dessous de laReference
dans votre .csproj fichier:De sorte que votre référence complète devrait ressembler à quelque chose comme ce qui suit:
Noter que NuGet supprimer CopyLocal/Privé si vous packages de mise à jour à nouveau dans l'avenir. (Par exemple, si vous mettez à jour à la MVC 5.2 aujourd'hui). Si cette version de la MVC est jamais GAC avait, le problème n ° 1 ci-dessus ne se reproduit pas aussi longtemps que vous avez ajouté à la configuration à l'étape A ci-dessus, mais le problème n ° 2 pourrait encore se produire de nouveau. Pour s'assurer que cela n'arrive pas dans l'avenir, je vous recommande de régler manuellement CopyLocal retour à la vraie toutes les fois que vous faites une mise à jour de package NuGet.
CopyLocal=true
ne nous a pas aidé; voir:System.Web.MVC
pas copié àbin
dossier depuis MS14-059<private>true</private>
si?System.Web.Mvc
et choisissez PropriétésTrue
Réglage CopyLocal=true n'a pas aidé. La solution de nettoyage puis de le fermer et de rouvrir de nouveau travaillé. Vous pourriez avoir besoin de fermer l'ensemble de l'instance de Visual Studio ainsi.
CopyLocal=true
doit juste être une interface utilisateur pour modifier le fichier csproj maintenant.Cela semble avoir été provoqué par une mise à Jour de Windows (KB2990942) pour fixer de sécurité vulnérabilité MS14-059, permettant le contournement du composant de sécurité. Notre construit cessé de travailler sur notre serveur de build après la mise à Jour de Windows a été installé, et la mise à jour de la csproj fichiers à utiliser 4.0.0.1 pour le Système.Web.Mvc de référence de correction de la question.
De Microsoft description de la vulnérabilité est:
Ainsi que la mise en CopyLocal=true dans le projet de référence, vous pouvez aussi avoir besoin de changer le Web.Fichier de configuration comme si...
Avis de la nouvelleversion="4.0.0.1". Cela a fonctionné pour moi, et j'espère que cela aidera quelques personnes à l'extérieur.
Sauve la mise à jour du framework MVC sur n'importe quel test/serveurs de production.
Acclamations De Microsoft. Vous êtes les meilleurs!
Votre tentative de me faire incompétent en face de mes clients a été déjouée encore une fois!
<private>true</private>
dans votre fichier de projet sera le forcer à être copié.Copy Local = True
sera parfois forcer à être copié parce que toute la fonctionnalité est buggé. Malheureusement, comme les autres personnes mentionnées, sans lien avec nuget bug va supprimer la<private>True</private>
paramètre si vous mettez à jour à partir de nuget et vous devrez manuellement ajouter de nouveau.Ainsi que la mise en
CopyLocal=true
dans le projet de référence, vous pouvez avoir besoin de changer le Web.Config fichier comme si...J'ai ajouté
culture="neutral"
aussi, et tout cela a résolu le problème.