2010-09-22 9 views
11

Tengo un problema muy extraño. Cada vez que trato de usar el cuadro de diálogo "Agregar vista" en ASP.NET MVC2 y luego trato de "Crear una vista fuertemente tipada" seleccionando "Ver clase de datos" en el menú desplegable de las clases disponibles ninguna de las clases ("modelos ") en mi proyecto MVC están apareciendo.Intentar agregar una vista fuertemente tipada no encuentra ninguna clase en el proyecto MVC

La parte más extraña son todos los ensamblajes a los que se refiere mi proyecto MVC, incluso otros proyectos en la solución, sus clases están apareciendo. He intentado limpiar, reconstruir, limpiar la carpeta obj, pero por alguna razón no aparece ninguna de las clases de mi ensamblado MVC real. Antes estaba funcionando bien, pero ahora ya no funciona y no puedo pensar en nada que haya cambiado.

¿Alguien ha experimentado este problema antes? ¡Gracias por la ayuda!

Imagen de ejemplo:

http://imgur.com/47itE.png

+0

Teniendo exactamente el mismo problema con este menú desplegable, normalmente se soluciona simplemente reconstruyendo el archivo, pero no está funcionando ahora. Está recogiendo todas las clases de mi dll de referencia, simplemente no está recogiendo las clases que están en mi proyecto web mvc, ¿lograron encontrar algún tipo de solución? – spaceman

Respuesta

2

cuenta de esto, aquí está la solución:

El proyecto MVC se refería a un grupo de conjuntos de contratos de servicio que, cuando hace referencia a un "CommonServiceContractAssembly.dll". El Proyecto MVC también hacía referencia a "CommonServiceContractAssembly.dll". El MVC Project y los ensamblados de contrato de servicio se crearon haciendo referencia a versiones ligeramente diferentes de "CommonServiceContractAssembly.dll"

Cuando Visual Studio 2010 se reflejaba en todos los ensamblados a los que se hace referencia para "Crear una vista fuertemente tipada" de Creo que no era t Asegúrese de utilizar la versión ligeramente diferente de "CommonServiceContractAssembly.dll" a la que se hace referencia para que no muestre las posibilidades reflejadas del "modelo fuertemente tipado" para los ensamblados que dependan de "CommonServiceContractAssembly.dll".

La solución es obligar al dominio de la aplicación de Visual Studio 2010 a usar la versión correcta de "CommonServiceContractAssembly.dll" cuando se inicia Visual Studio 2010. Esto se logró con un evento posterior Construir como el siguiente:

REM Esto es necesario para la generación de T4 a partir de modelos para trabajar correctamente copia "$ (TargetDir)" CommonServiceContractAssembly.dll" "$ (DevEnvDir) PublicAssemblies \"/ Y

Así que copiar "CommonServiceContractAssembly.dll" que se hace referencia "en todas partes" en donde Visual Studio lo cargará. Después de que hice esto todo funcionaba correctamente.

Otra opción sería la de garantizar en todo momento que todos los conjuntos que comparten una dependencia común siempre se compila con la misma versión de esa dependencia.

+0

tengo exactamente el mismo problema que está describiendo aquí. he comprobado las referencias y he actualizado todo para usar la misma versión para todas las dependencias, pero el problema persiste. ¿cómo descubrió su solución por cierto? – spaceman

+0

Hmm, lamento que la solución no funcione para usted. Eche un vistazo al reflector y verifique lo anterior también, nunca se sabe. Cómo gestioné mi solución estaba pensando en cómo Visual Studio debe cargar mis ensamblajes para reflejarlos y determinar "Candidatos de ViewModel". Según la experiencia previa, sé que .NET (y VS, ya que se ejecuta en .NET) pueden "molestarse" si todas las versiones a las que se hace referencia no coinciden. Apuesto a que VS2010 arroja una excepción en algún lugar interno que se maneja y simplemente decide dejar de intentar resolver el ensamblaje afectado. ¡Mantennos informados! –

+0

Esta respuesta me indicó la dirección correcta. Mi proyecto hacía referencia, por ejemplo, a 'Assembly X 1.0.1', mientras que una de las otras referencias usaba' Assembly X 1.0.0'. La actualización de la referencia en esa biblioteca de clase a la versión más nueva hizo el truco. – Marthijn

-1

Algunos tipos de su proyecto son filtrados por ese diálogo (por ejemplo, todos los tipos que terminan en 'Controlador', o todos los tipos en el System o Microsoft espacio de nombres). Es posible que su proyecto no tenga ningún tipo que pase por los filtros del diálogo.

+0

¡Gracias por la respuesta! Este no es el problema. Di "Person.cs" en la carpeta de modelos de mi proyecto MVC. Por alguna razón, Person.cs no se muestra en absoluto en el menú desplegable aunque lo hizo antes (¡o clases de naturaleza similar)! Muy extraño, lo sé. No sería un gran problema, pero mi empresa pronto utilizará las capacidades T4 de esta herramienta para crear nuestras propias plantillas, así que tengo que descubrir qué está pasando para que podamos ser eficientes. –

1

Asegúrese de marcarlos como "Públicos" y compilarlos una vez antes de abrir el cuadro de diálogo Agregar Vista.

+1

Yup también es un buen punto, ¡haz esto antes que cualquier otra cosa! –

+0

Abajo, proporcione una explicación ... –

14

Es Debido a que no ha creado su aplicación, primero cree su aplicación y luego haga una vista, y luego se mostrará.

+2

Esto es definitivamente lo primero que debe intentarse ya que VS usa la reflexión en el código compilado para descubrir posibles tipos de ViewModel. Mencioné en mi pregunta que traté de limpiar y reconstruir y aún así experimenté el problema. –

-1

Antes de Agregar Vista solo Cree la solución y luego agregue ver que funcionará. si no funciona entonces puede volver a preocuparse por mí, le daré otra solución

+0

La pregunta dice que lo hice, pero esta podría ser una solución probable para otros que erróneamente no tienen –

Cuestiones relacionadas