¿Por qué System.Web.Mvc no aparece en Agregar referencias?

132

Usando C #, Visual Studio 2010.

Hay un espacio de nombres llamado System.Web.Mvc documentado en MSDN. La documentación para todos los tipos en ese espacio de nombres dice que están en System.Web.Mvc.dll.

Sin embargo, cuando voy a Agregar referencia, pestaña ".NET", este ensamblado falta en la lista. ¿Por qué?

Timwi
fuente
1
¿Puede aclarar: su proyecto FUNCIONA sin esa referencia? ¿Está en su web.config (vea mi respuesta)?
Básico
44
No estoy trabajando en ningún proyecto. Solo quería ayudar a alguien aquí en StackOverflow. Por lo general, agrego una referencia para mirar el IntelliSense y / o el F12 para cualquier tipo. En este caso, faltaba el ensamblaje deseado de la lista, así que pregunté por qué.
Timwi
1
NOTA para los lectores de esta página: a partir de hoy (2015-02-09), el método para resolver esto ha cambiado con el tiempo: lea todas las respuestas: varias versiones de VS.NET y .NET framework mueven el código referenciado para MVC a diferentes lugares
qxotk

Respuestas:

106

En VS Express 2012 no pude encontrar System.Web.Mvc en la pestaña "ensamblados", pero después de un poco de búsqueda descubrí que necesitaba buscar en la pestaña " ensamblados \ extensiones " en lugar de la "ensamblados \ marco" predeterminados "pestaña.

jahu
fuente
1
+1 para ti porque encontraste la causa raíz del problema que tenía. Elegí usar el método de instalación NuGet que se describe a continuación, y comentaré allí lo que hice.
qxotk
Probé este método en Visual Studio Community 2015 pero recibí un error de tiempo de ejecución relacionado con la incompatibilidad de versiones ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). Tengo otro proyecto en mi solución que hace referencia a una versión diferente, y este método solo me permitió agregar una referencia a System.Web.Mvc, Versión = 4.0.0.0. El método de instalación de NuGet agregó la versión correcta
NJS
101

La mejor manera es usar el administrador de paquetes NuGet.

Simplemente actualice el siguiente paquete MVC y debería funcionar.

ingrese la descripción de la imagen aquí

talabathula sandeep
fuente
44
Tengo que admitir que esta es la forma correcta de agregar referencias a MVC en la mayoría de los casos (debería evitar los problemas con la ejecución de la aplicación fuera de Visual Studio que podrían causar malas referencias). Sin embargo, en las grandes soluciones que ya contienen MVC en algunos proyectos, es aún mejor usar "Administrar paquetes NuGet para la solución" para instalar la misma versión de la biblioteca. La razón es que si solo los instala desde el administrador de paquetes NuGet, puede terminar con incompatibilidad de versión (el administrador generalmente le ofrecerá la versión más nueva).
jahu
2
He usado esa solución para un proyecto que usa MVC 4 que no pudo compilarse con Visual Studio 2015. También garantiza que las bibliotecas del proyecto sean uniformes en todos los desarrolladores.
ceetheman
1
Tuve este problema con una caja que solo tenía VS2015, mientras que otros miembros del equipo tenían VS2013, lo que podría hacer que hagan referencia a la ubicación anterior (sin errores de compilación) mientras que no tenía el código y los errores de compilación. Cabe destacar que, a partir de hoy, no pude encontrar Microsoft.Web.Mvc, que fueron las referencias que causaron el problema. En la respuesta de @forderah arroja luz sobre el hecho de que el nombre es diferente en NuGet. Microsoft.Web.Mvc ahora es Microsoft.AspNet.Mvc, que también extrae las dependencias enumeradas en su respuesta.
qxotk
1
Incluso tuve este problema en VS2017, y esto lo solucionó. No estoy seguro de por qué VS2017 me dijo que cree que el ensamblaje al que se debe hacer referencia es System.Web.Mvc mientras en realidad está buscando Microsoft.AspNet.Mvc
Michael Davidson
60

Tuve el mismo problema y no pude localizar el ensamblaje de referencia System.Web.MVC.

Finalmente lo descubrí y se ubicó dentro de la siguiente ubicación.

Tenga en cuenta si su VS se instaló en C: (A veces, el MVC.dll no está en la ubicación predeterminada de la que todos hablan, me refiero a la carpeta " Ensamblados de referencia " ubicada en la unidad C:).

si no está allí, definitivamente debería estar aquí:

\ Archivos de programa (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Por lo tanto, agregue el dll a través de la navegación o la pestaña de exploración en el menú Agregar referencia.

Patrick Hofman
fuente
1
Esto obtiene la referencia para mí, aunque estoy seguro de que ya he agregado esta referencia a través de la lista de ensamblados de Framework.
Zarepheth
9
No es una buena solución si trabajas en equipo con VCS. Los caminos absolutos son malos en este caso.
Denis The Menace
Definitivamente de acuerdo en que esta es una mala solución en cualquier tipo de entorno de desarrollo de equipo debido a la dependencia de ruta absoluta codificada.
Craig
La forma de evitarlo es asegurarse de que todos usen la misma ruta para la DLL. No debería ser un problema si todos los miembros del equipo tienen los conjuntos instalados en esa ubicación, como deberían. Alternativamente, la DLL se puede copiar de esa ruta y colocar directamente en el proyecto, por lo que tiene una ruta relativa. Pero de cualquier manera, solo tener la ubicación de dónde está esa DLL, es un buen punto de partida.
vapcguy
Esto realmente ayudó; pero Microsoft debería haber hecho esto mucho más limpio y fácil ...
JosephDoggie
28

También puede agregar esto desde la consola de Nuget Package Manager, algo así como:

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

Microsoft.AspNet.Mvc tiene dependencias en:

  • '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)'

... lo cual no parece ser un problema para mí. En nuestro caso, esta es una biblioteca de clases que existe únicamente para proporcionar soporte para nuestras aplicaciones Mvc. Entonces, pensamos que es una dependencia benigna en el peor de los casos.

Definitivamente prefiero esto a apuntar a un ensamblaje en el sistema de archivos o en el GAC, ya que actualizar el paquete en el futuro probablemente será mucho menos doloroso que las experiencias que he tenido con el GAC y las referencias de ensamblaje del sistema de archivos en el pasado.

fordareh
fuente
1
Usé este método, y estoy de acuerdo con no usar rutas absolutas locales en las referencias. Utilicé el administrador de paquetes NuGet, agregando el paquete y las dependencias solucioné el problema en mi caja solo VS2015.
qxotk
11

He tenido el mismo problema y aquí está la razón divertida: supongo que esperas System.Web.Mvcque se encuentre debajo System.Webde la lista. Pero la lista no es alfabética.

Primero ordene la lista y luego mire cerca de System.Web.

Alican
fuente
1
También asegúrese de obtener la versión correcta. En mi caso, System.Web.Mvc v2 y v4 están allí, y tampoco están uno al lado del otro.
TTT
Tuve el mismo problema para encontrar System.Web.Mvc por los mismos motivos. En cambio, utilicé Microsoft.AspNet.Mvc, asegurándome de verificar qué estaban usando los otros proyectos en mi solución con respecto al número de versión.
qxotk
5

"OK, agregar ese XML al Web.config funciona, pero no responde la pregunta"

Debería estar allí. Por defecto, la lista de agregar referencias parece estar ordenada, pero no es el caso. Presiona el encabezado del nombre y mira de nuevo.

eglasius
fuente
No suelo decir "falta este ensamblado en la lista" a menos que esté seguro.
Timwi
@Timwi supuse, pero dada la otra respuesta, que hay muy pocas posibilidades de que no esté allí con vs 2010 instalado y que en mi caso siempre he encontrado lo que necesito en la lista de referencias sin tocar el encabezado del nombre que tenía para decirlo ... de hecho, ahora sé por qué nunca tuve que hacerlo antes y en comparación con 2010 lo hago - vea el primer comentario: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius
Entonces, ¿estás diciendo que hacer clic en el encabezado Nombre te ordena las cosas? No hace nada aquí en mi máquina ...
Roman Starkov
1
@romkyns solo funciona después de que se hayan cargado todos los ensamblajes de la lista.
eglasius
5

Revisa estos pasos:

  1. Verifique que MVC esté instalado correctamente.
  2. Verifique la propiedad del proyecto y vea cuál es el Marco Objetivo del proyecto. Si el marco de destino no está configurado en .Net Framework 4, configúrelo.

Nota : si el marco de destino se establece en .Net Framework 4 Client Profile, no incluirá la referencia MVC en la lista de referencias. Puede encontrar diferentes entre .Net Framework 4 y .Net Framework 4 Client Profile aquí .

.NET Framework 4 Client Profile es un subconjunto de .NET Framework 4 que está optimizado para aplicaciones cliente. Proporciona funcionalidad para la mayoría de las aplicaciones cliente, incluidas Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) y las funciones ClickOnce. Esto permite una implementación más rápida y un paquete de instalación más pequeño para aplicaciones que se dirigen al .NET Framework 4 Client Profile.

Iman
fuente
Este fue un buen consejo. Cuando fui a las propiedades de mi proyecto, solo enumeraba .NET Core 1 y 2. Sin .NET Framework 4.x. Me faltaban asambleas en mi lista. Resulta que fue cómo construí mi proyecto, elegí la opción incorrecta, para usar .NET Core en lugar de .NET Framework. Ahora se la diferencia. :)
vapcguy
4

Resolví este problema buscando "mvc". El System.Web.Mvc apareció en los resultados de búsqueda, a pesar de que no está incluido en la lista.

zety
fuente
3

El ensamblaje deseado ha aparecido en la lista ahora.

Solo puedo especular qué causó su aparición, pero sospecho que es el hecho de que fui FileNewProjectASP.NET Web Application , lo que nunca había hecho antes. Es posible que esto haya causado algún tipo de inicialización tardía y que la lista se complete con ensamblados adicionales para el desarrollo web.

Timwi
fuente
siempre estuvo seguro, siempre está bien, está bien: P ... vea el comentario que agregué a mi respuesta, en el enlace que dice: "El problema con la pestaña .net, es mientras está ocurriendo la sincronización y se está actualizando, es sin ordenar en orden alfabético ... "... que es un comportamiento nuevo para vs 2010, nunca me di cuenta hasta que vi su pregunta.
eglasius
@egl Acabo de probar en mi máquina aquí (VS2010) y no está en la lista. Obtengo diferentes conjuntos de ensamblajes dependiendo de Target Framework, pero este nunca está allí.
Roman Starkov
@romkyns intenta apuntar a .net 4 y hace lo que mencioné en mi respuesta. También asegúrese de darle suficiente tiempo para cargar, ya que hace una carga asíncrona.
eglasius
2

Esto ha cambiado para Visual Studio 2012 (sé que la pregunta original dice VS2010, pero el título aún aparecerá en las búsquedas).

Cuando crea un proyecto MVC VS2012, el system.web.mvc se coloca en la carpeta de paquetes que es igual a la solución. Esto se hará referencia en el proyecto web de forma predeterminada y puede encontrar la ruta exacta allí).

Si desea hacer referencia a esto en un proyecto secundario (por ejemplo, un archivo .dll de soporte con filtros u otros atributos), puede hacerlo desde allí.

Prof Von Lemongargle
fuente
2

No obtuve System.Web.Mvc en VS 2012, pero lo obtuve en VS 2013. Utilizando AddReference Dialog, ingrese la descripción de la imagen aquí

O bien, puede encontrar esto en la ruta de su proyecto,

YourProjectName \ packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

MD Shahriar
fuente
Gran consejo que muestra dónde encontrar en la ruta del proyecto existente. ¡Gracias!
Alan
0

Creo que encontrará que el ensamblado MVC está referenciado en el archivo web.config, no en el proyecto en sí.

Algo como esto:

<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>

Para responder a tu comentario;

La mejor respuesta que puedo dar es desde aquí :

El elemento add agrega una referencia de ensamblaje para usar durante la compilación de un recurso dinámico. ASP.NET vincula automáticamente este ensamblado al recurso al compilar cada módulo de código.

Básico
fuente
OK, agregar ese XML al Web.config funciona, pero no responde la pregunta.
Timwi
"funciona" ya que en él proporciona el intellisense? He editado mi respuesta
básico el
0

se puede instalar por separado, y no se incluye en el marco, elija "extensiones" de la lista de pestañas y existe y hay más otras bibliotecas, todo está bien, no es necesario para usar bibliotecas antiguas, etc., existe viejo 20 30 y 4001

usuario1005462
fuente
0

Si tiene este problema en Visual Studio 2017, es probable que esté trabajando con un proyecto MVC 4 creado en una versión anterior de VS con una ruta de referencia que apunta a C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 ya no instala este directorio.

Por lo general, resolvemos esto instalando una copia de Visual Studio 2015 junto con nuestra instancia de 2017, y eso instala las bibliotecas necesarias en la ruta anterior. Luego actualizamos todas las referencias en los proyectos afectados y estamos listos para comenzar.

JD Mallen
fuente