2010-09-06 21 views
103

Uso de C#, Visual Studio 2010.¿Por qué System.Web.Mvc no figura en Agregar referencias?

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 ensamblaje no se encuentra en la lista. ¿Por qué?

+0

¿Puede aclarar si su proyecto FUNCIONA sin esa referencia? ¿Está en su web.config (ver mi respuesta)? – Basic

+3

No estoy trabajando en ningún proyecto. Solo quería ayudar a alguien aquí en StackOverflow. Normalmente agrego una referencia para mirar el IntelliSense y/o el F12 para cualquier tipo. En este caso, faltaba el ensamblaje deseado de la lista, entonces pregunté por qué. – Timwi

+0

NOTA para los lectores de esta página - a día 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 alrededor en diferentes lugares. – condiosluzverde

Respuesta

2

El ensamblaje deseado ha aparecido en la lista ahora.

sólo puedo especular sobre lo que hizo que apareciera, pero sospecho que es el hecho de que fui Archivo → Nuevo Proyecto → aplicación Web ASP.NET, 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.

+0

siempre estuvo siempre disponible, está bien: P ... vea el comentario que agregué a mi respuesta, en el enlace dice: "El problema con la pestaña .net es que mientras la sincronización está ocurriendo y se actualiza, no está ordenando en orden alfabético ... "... que es un comportamiento nuevo frente a 2010, nunca me di cuenta de eso hasta que vi su pregunta. – eglasius

+0

@egl Acabo de probar en mi máquina aquí (VS2010) y no está en la lista en absoluto. Obtengo diferentes conjuntos de ensambles dependiendo de Target Framework, pero este nunca está allí. –

+0

@romkyns intenta orientar .net 4, y haciendo lo que mencioné en mi respuesta. También asegúrese de darle suficiente tiempo para cargar, ya que carga de manera asíncrona. – eglasius

0

Creo que encontrará que el ensamblaje de 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 su comentario;

La mejor respuesta que puedo dar es de here:

El elemento de complemento agrega una referencia de ensamblado a utilizar durante la compilación de un recurso dinámico. ASP.NET vincula automáticamente este ensamblado a el recurso al compilar cada código del módulo .

+0

OK, agregando que XML al Web.config funciona, pero no responde la pregunta. – Timwi

+0

"funciona", ya que proporciona el intellisense? He editado mi respuesta – Basic

4

"OK, añadiendo que XML para los Web.config obras, pero no responder a la pregunta "

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

+0

No suelo decir "falta este ensamblaje de la lista" a menos que esté seguro de ello. – Timwi

+0

@Timwi Me imaginé, pero dada la otra respuesta, que hay v. Pocas posibilidades de que no esté allí con el año 2010 instalado y que en mi caso siempre he encontrado lo que necesito en la lista de referencias sin siquiera presionar el encabezado del nombre I tenía que decirlo ... de hecho, ahora sé por qué nunca tuve que hacerlo antes y en comparación con 2010, lo hago - vea el primer comentario: http://weblogs.asp.net/scottgu/archive/2009/10/29 /add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx#7242495 – eglasius

+0

¿Entonces está diciendo que al hacer clic en el encabezado Nombre se solucionan las cosas? No hace nada aquí en mi máquina ... –

3

comprobar estos pasos:

  1. Check es MVC se ha instalado correctamente.
  2. Compruebe la propiedad del proyecto y vea qué es el Marco de objetivos del proyecto. Si el marco de destino no está configurado en .Net Framework 4, configúrelo.

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

.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 características de 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 a .NET Framework 4 Client Profile.

53

Tuve el mismo problema y no pude encontrar el ensamblado de referencia System.Web.MVC.

Finalmente descubierto y se encuentra dentro de la siguiente ubicación.

Nota si su VS se instala en C: (A veces el MVC.dll no está en la ubicación predeterminada que todo el mundo habla de, me refiero a la carpeta "conjuntos de referencia" que se encuentra en el directorio C:. En coche)

si no está allí, que sin duda debe estar aquí:

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

Así que agrega el dll a través de la navegación o la pestaña de búsqueda en la referencia de agregar e menú.

+0

Esto me sirve de referencia, aunque estoy seguro de que he agregado anteriormente esta referencia a través de la lista de Ensambles de Framework. – Zarepheth

+0

Me salvaste el día. Muchas gracias. :) – Jake

+0

Cool Scene chicos! ¡Me alegra que mis hallazgos los hayan ayudado a todos! :) –

10

He tenido el mismo problema y esta es la razón divertida: supongo que espera que System.Web.Mvc se encuentre debajo de System.Web en la lista. Pero la lista no es alfabética.

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

+1

También asegúrese de estar obteniendo la versión correcta. En mi caso, System.Web.Mvc v2 y v4 están ahí, y tampoco están uno al lado del otro. – TTT

+0

Tenía el mismo problema para encontrar System.Web.Mvc por las mismas razones. Fui con Microsoft.AspNet.Mvc en su lugar, asegurándome de ver qué estaban usando los otros proyectos en mi solución con respecto al número de versión. – condiosluzverde

2

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

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

Si desea hacer referencia a esto en un proyecto secundario (digamos un .dll compatible con filtros u otros atributos), puede hacer referencia desde allí.

20

También puede agregar esto desde la consola de Nuget Administrador de paquetes, 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)'
  • ' M icrosoft.AspNet.Razor (≥ 2.0.20710.0 & & < 2.1)'

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

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

+1

Utilicé este método, y estoy de acuerdo con no usar rutas absolutas locales en las referencias. Usé el administrador de paquetes NuGet, agregué el paquete y las dependencias arreglaron el problema en mi cuadro VS2015-only. – condiosluzverde

94

En VS Express 2012 no pude encontrar System.Web.Mvc en la pestaña "ensambles", pero después de buscar un poco descubrí que tengo que buscar en la pestaña "ensambles \ extensiones" en lugar de la pestaña predeterminada "assemblies \ framework".

+0

+1 para ti porque encontraste la causa raíz del problema que tuve. Elegí usar el método de instalación NuGet proscrito a continuación, y comentaré allí lo que hice. – condiosluzverde

+0

peor parte funcionó bien durante más de 6 meses - reiniciado y, de repente, tuve el problema (que ahora se resuelve gracias a usted) – schmoopy

57

La mejor manera es usar el administrador de paquetes NuGet.

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

enter image description here

+2

Tengo que admitir que esta es la manera correcta de agregar una referencia a MVC en la mayoría casos (debe 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 algunos proyectos de MVC, el uso de "Administrar paquetes de NuGet para la solución" para instalar la misma versión de la biblioteca es aún mejor. La razón es que, si los instala desde el administrador de paquetes NuGet, podría terminar con la incompatibilidad de la versión (el administrador generalmente le ofrecerá la versión más nueva). – jahu

+1

Utilicé esa solución para un proyecto que utiliza MVC 4 que no se pudo compilar con Visual Studio 2015. También garantiza que las bibliotecas del proyecto sean uniformes para todos los desarrolladores. – ceetheman

+0

Tuve este problema con un cuadro 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 yo no tenía el código ni los errores de compilación. De nota, 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 incluye las dependencias enumeradas en su respuesta. – condiosluzverde

3

He resuelto este problema mediante la búsqueda "MVC". El System.Web.Mvc apareció en los resultados de búsqueda, a pesar de que no está incluido en la lista.

0

que puede ser instalado separado, y no está incluido en framwork, elija lista pestaña "Extensiones" y que existe hay más otras librerías, todo está bien, pero no es necesario que se utiliza librerías antiguas, etc, existe edad 20 30 y 4001

Cuestiones relacionadas