Pourquoi System.Web.Mvc n'est-il pas répertorié dans Ajouter des références?

132

À l'aide de C #, Visual Studio 2010.

Il existe un espace de noms appelé System.Web.Mvc documenté sur MSDN. La documentation de tous les types de cet espace de noms indique qu'ils sont dans System.Web.Mvc.dll.

Cependant, lorsque je vais dans Ajouter une référence, onglet «.NET», cet assemblage est absent de la liste. Pourquoi?

Timwi
la source
1
Pouvez-vous clarifier: votre projet fonctionne-t-il sans cette référence? Est-ce dans votre web.config (voir ma réponse)?
base
4
Je ne travaille sur aucun projet. Je voulais juste aider quelqu'un ici sur StackOverflow. J'ajoute généralement une référence afin de regarder l'IntelliSense et / ou le F12 pour tout type. Dans ce cas, l'assemblage souhaité était absent de la liste, j'ai donc demandé pourquoi.
Timwi
1
REMARQUE aux lecteurs de cette page - à partir d'aujourd'hui (09/02/2015), la méthode de résolution de ce problème a changé au fil du temps - lisez toutes les réponses - diverses versions de VS.NET et .NET Framework déplacent le code référencé pour MVC dans à différents endroits.
qxotk

Réponses:

106

Dans VS Express 2012, je n'ai pas trouvé System.Web.Mvc dans l'onglet "assemblys", mais après quelques recherches, j'ai découvert que je devais regarder dans l' onglet " assemblies \ extensions " plutôt que dans l'onglet "assemblies \ framework par défaut" "onglet.

jahu
la source
1
+1 pour vous parce que vous avez trouvé la cause première du problème que j'ai eu. J'ai choisi d'utiliser la méthode d'installation NuGet proscrite ci-dessous, et je vais y commenter ce que j'ai fait.
qxotk
J'ai essayé cette méthode dans Visual Studio Community 2015 mais j'ai eu une erreur d'exécution liée à l'incompatibilité de version ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). J'ai un autre projet dans ma solution référençant une version différente, et cette méthode m'a seulement permis d'ajouter une référence à System.Web.Mvc, Version = 4.0.0.0. La méthode d'installation NuGet a ajouté la version correcte
NJS
101

Le meilleur moyen est d'utiliser le gestionnaire de packages NuGet.

Mettez simplement à jour le package MVC ci-dessous et cela devrait fonctionner.

entrez la description de l'image ici

Sandeep talabathula
la source
4
Je dois admettre que c'est la bonne façon d'ajouter une référence à MVC dans la plupart des cas (cela devrait vous éviter les problèmes d'exécution de l'application en dehors de Visual Studio que de mauvaises références pourraient causer). Cependant, dans les grandes solutions qui contiennent déjà certains projets MVC, utiliser le "Manage NuGet Packages for solution" pour installer la même version de la bibliothèque est encore mieux. La raison en est que si vous les installez simplement à partir du gestionnaire de packages NuGet, vous risquez de vous retrouver avec une incompatibilité de version (le gestionnaire vous proposera généralement la version la plus récente).
jahu
2
J'ai utilisé cette solution pour un projet utilisant MVC 4 qui n'a pas pu compiler avec Visual Studio 2015. Cela garantit également que les bibliothèques de projet sont uniformes pour tous les développeurs.
ceetheman
1
J'ai eu ce problème avec une boîte qui ne contenait que VS2015, tandis que d'autres membres de l'équipe avaient VS2013 - ce qui pourrait les faire référencer l'ancien emplacement (pas d'erreurs de construction) alors que je n'avais pas le code et les erreurs de construction. À noter, à partir d'aujourd'hui, je n'ai pas pu trouver Microsoft.Web.Mvc - qui étaient les références à l'origine du problème. Dans la réponse de @forderah met en lumière le fait que le nom est différent dans NuGet. Microsoft.Web.Mvc s'appelle désormais Microsoft.AspNet.Mvc, qui extrait également les dépendances répertoriées dans sa réponse.
qxotk
1
J'ai même eu ce problème dans VS2017, et cela l'a résolu. Je ne sais pas pourquoi VS2017 m'a dit qu'il pense que l'assemblage qui doit être référencé est System.Web.Mvc alors qu'il recherche réellement Microsoft.AspNet.Mvc
Michael Davidson
60

J'ai eu le même problème et je n'ai pas pu localiser l'assemblage de référence System.Web.MVC.

Enfin découvert et il était situé à l'emplacement suivant.

Notez si votre VS a été installé dans C: (Parfois, MVC.dll n'est pas dans l'emplacement par défaut dont tout le monde parle, je veux dire le dossier « Assemblys de référence » situé dans le lecteur C:).

si ce n'est pas là, il devrait certainement être ici:

\ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Ajoutez donc la dll via la navigation ou l'onglet Parcourir dans le menu Ajouter une référence.

Patrick Hofman
la source
1
Cela me donne la référence, même si je suis sûr que j'ai déjà ajouté cette référence via la liste des assemblys de cadre.
Zarepheth
9
Pas vraiment une bonne solution si vous travaillez en équipe avec VCS. Les chemins absolus sont mauvais dans ce cas.
Denis The Menace
Tout à fait d'accord que c'est une mauvaise solution dans tout type d'environnement de développement d'équipe en raison de la dépendance de chemin absolu codée en dur.
Craig
La façon de contourner cela est de vous assurer que tout le monde utilise le même chemin pour la DLL. Cela ne devrait pas poser de problème si tous les membres de l'équipe ont les assemblys installés à cet emplacement, comme ils le devraient. Sinon, la DLL peut être copiée à partir de ce chemin et placée directement dans le projet, afin qu'elle ait un chemin relatif. Mais dans tous les cas, le simple fait de connaître l'emplacement de cette DLL est un bon point de départ.
vapcguy
Cela a vraiment aidé; mais Microsoft aurait dû rendre cela beaucoup plus clair et facile ....
JosephDoggie
28

Vous pouvez également l'ajouter à partir de la console Nuget Package Manager, quelque chose comme:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX

Microsoft.AspNet.Mvc a des dépendances sur:

  • «Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)»
  • «Microsoft.Web.Infrastructure (≥ 1.0.0.0)»
  • «Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)»

... ce qui ne me semble pas grave. Dans notre cas, il s'agit d'une bibliothèque de classes qui existe uniquement pour fournir un support pour nos applications Mvc. Donc, nous pensons que c'est une dépendance bénigne au pire.

Je préfère définitivement cela plutôt que de pointer vers un assemblage sur le système de fichiers ou dans le GAC, car la mise à jour du package à l'avenir sera probablement beaucoup moins pénible que les expériences que j'ai eues avec les références d'assemblage du GAC et du système de fichiers dans le passé.

fordareh
la source
1
J'ai utilisé cette méthode et je suis d'accord pour ne pas utiliser de chemins absolus locaux dans les références. J'ai utilisé le gestionnaire de packages NuGet, l'ajout du package et des dépendances a résolu le problème sur ma boîte VS2015 uniquement.
qxotk
11

J'ai eu le même problème et voici la raison amusante: je suppose que vous vous attendez System.Web.Mvcà être situé sous System.Webla liste. Mais la liste n'est pas alphabétique.

Triez d'abord la liste, puis regardez près du fichier System.Web.

Alican
la source
1
Assurez-vous également que vous disposez de la bonne version. Dans mon cas, System.Web.Mvc v2 et v4 sont là, et ils ne sont pas non plus côte à côte.
TTT
J'ai eu le même problème pour trouver System.Web.Mvc pour les mêmes raisons. Je suis allé avec Microsoft.AspNet.Mvc à la place, en m'assurant de vérifier ce que les autres projets de ma solution utilisaient en ce qui concerne le numéro de version.
qxotk
5

"OK, l'ajout de ce XML au Web.config fonctionne, mais cela ne répond pas à la question"

Ça devrait être là. Par défaut, la liste d'ajout de références semble être ordonnée, mais ce n'est pas le cas. Appuyez sur l'en-tête du nom et regardez à nouveau.

Eglasius
la source
Je ne dis pas souvent «cet assemblage est absent de la liste» à moins d'en être sûr.
Timwi
@Timwi J'ai pensé, mais étant donné l'autre réponse, qu'il y a peu de chances que ce soit là avec vs 2010 installé et que dans mon cas, j'ai toujours trouvé ce dont j'avais besoin dans la liste de références sans jamais toucher l'en-tête du nom que j'avais pour le dire ... en fait, je sais maintenant pourquoi je n'ai jamais eu à le faire avant et en vs 2010 je le fais - voir le premier commentaire: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius
Vous dites donc que cliquer sur l'en-tête Nom trie les choses pour vous? Ne fait rien ici sur ma machine ...
Roman Starkov
1
@romkyns cela ne fonctionne qu'une fois tous les assemblys de la liste chargés.
eglasius
5

Vérifiez ces étapes:

  1. Vérifiez que MVC est correctement installé.
  2. Vérifiez la propriété du projet et voyez ce qu'est le cadre cible du projet. Si le framework cible n'est pas défini sur .Net Framework 4, définissez-le.

Remarque : si le framework cible est défini sur .Net Framework 4 Client Profile, il ne listera pas la référence MVC dans la liste de références. Vous pouvez trouver les différences entre .Net Framework 4 et .Net Framework 4 Client Profile ici .

Le profil client .NET Framework 4 est un sous-ensemble du .NET Framework 4 optimisé pour les applications clientes. Il fournit des fonctionnalités pour la plupart des applications clientes, y compris les fonctionnalités Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) et ClickOnce. Cela permet un déploiement plus rapide et un package d'installation plus petit pour les applications qui ciblent le profil client .NET Framework 4.

Iman
la source
C'était un bon conseil. Lorsque je suis allé aux propriétés de mon projet, il n'a répertorié que .NET Core 1 et 2. Pas de .NET Framework 4.x. Il me manquait des assemblages dans ma liste. Il s'avère que c'est ainsi que j'ai construit mon projet - j'ai choisi la mauvaise option - pour utiliser .NET Core au lieu de .NET Framework. Maintenant je connais la différence. :)
vapcguy
4

J'ai résolu ce problème en recherchant "mvc". Le System.Web.Mvc est apparu dans les résultats de recherche, bien qu'il ne soit pas contenu dans la liste.

zety
la source
3

L'assemblage souhaité est maintenant apparu dans la liste.

Je ne peux que spéculer sur ce qui l'a fait apparaître, mais je soupçonne que c'est le fait que je suis allé FichierNouveauProjetApplication Web ASP.NET , ce que je n'avais jamais fait auparavant. Il est possible que cela ait provoqué une sorte d'initialisation tardive et que la liste soit remplie avec des assemblys supplémentaires pour le développement Web.

Timwi
la source
il était toujours sûrement toujours là, c'est ok: P ... voir le commentaire que j'ai ajouté à ma réponse, dans le lien il dit: "Le problème avec l'onglet .net, c'est que l'async se produit et qu'il est en cours de rafraîchissement, son pas de tri par ordre alphabétique ... "... qui est un nouveau comportement par rapport à vs 2010, je ne m'en suis jamais rendu compte avant d'avoir vu votre question.
eglasius le
@egl Je viens de tester ma machine ici (VS2010) et ce n'est pas du tout dans la liste. J'obtiens différents ensembles d'assemblages en fonction du Framework cible, mais celui-ci n'est jamais là.
Roman Starkov
@romkyns essaie de cibler .net 4 et de faire ce que j'ai mentionné dans ma réponse. Assurez-vous également de lui laisser suffisamment de temps pour se charger, car il effectue une charge asynchrone.
eglasius
2

Cela a changé pour Visual Studio 2012 (je sais que la question d'origine dit VS2010, mais le titre apparaîtra toujours dans les recherches).

Lorsque vous créez un projet VS2012 MVC, le system.web.mvc est placé dans le dossier packages qui est pair à la solution. Cela sera référencé dans le projet Web par défaut et vous pouvez y trouver le chemin exact).

Si vous souhaitez référencer ceci dans un projet secondaire (disons un .dll de support avec des filtres ou d'autres attributs), vous pouvez le référencer à partir de là.

Prof Von Lemongargle
la source
2

Je n'ai pas eu System.Web.Mvc dans VS 2012 mais je l'ai eu dans VS 2013. En utilisant la boîte de dialogue AddReference, entrez la description de l'image ici

Ou, vous pouvez le trouver dans le chemin de votre projet,

Nom de votre projet \ packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

Md Shahriar
la source
Excellent conseil indiquant où trouver dans le chemin du projet existant. THX!
Alan le
0

Je crois que vous trouverez que l'assemblage MVC est référencé dans le fichier web.config, pas dans le projet lui-même.

Quelque chose comme ça:

<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.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Pour répondre à votre commentaire;

La meilleure réponse que je puisse donner est d' ici :

L'élément add ajoute une référence d'assembly à utiliser lors de la compilation d'une ressource dynamique. ASP.NET lie automatiquement cet assembly à la ressource lors de la compilation de chaque module de code.

De base
la source
OK, l'ajout de ce XML au Web.config fonctionne, mais cela ne répond pas à la question.
Timwi
"fonctionne" comme il fournit l'intellisense? J'ai modifié ma réponse
base
0

il peut être installé séparément, et il n'est pas inclus dans le cadre, choisissez la liste des onglets "extensions" et il existe il y en a et plus d'autres bibliothèques, tout est ok pas nécessaire pour utiliser les anciennes bibliothèques, etc., existe les anciennes 20 30 et 4001

user1005462
la source
0

Si vous rencontrez ce problème dans Visual Studio 2017, il est probable que vous travaillez avec un projet MVC 4 créé dans une version précédente de VS avec un chemin d'indication de référence pointant vers C:\Program Files (x86)\Microsoft ASP.NET . Visual Studio 2017 n'installe plus ce répertoire.

Nous résolvons généralement ce problème en installant une copie de Visual Studio 2015 à côté de notre instance 2017, et qui installe les bibliothèques nécessaires dans le chemin ci-dessus. Ensuite, nous mettons à jour toutes les références dans les projets concernés et nous sommes prêts à partir.

JD Mallen
la source