2012-06-26 24 views
10

La pregunta es cómo resolver conflictos entre versiones de ensamblados en mi proyecto que se actualizó a MVC4 y EF5?Se encontraron conflictos entre versiones diferentes del mismo ensamblado dependiente.MVC3 -> MVC4/EF4 -> EF5

El problema se manifiesta en el hecho de que mis controladores y modelos pueden incluir System.Data.Objects, pero ahora mis vistas.

estoy usando MVC 4, mi proyecto se actualizó desde MVC 3.

Entity Framework es la versión 5.

Tengo un controlador que es capaz de utilizar ObjectContext desde System.Data.Objects.

Mis usos: usando System.Data.Objects; usando System.Data.Entity;

Cuando intento para incluir el uso de los System.Data.Objects la vista formulario, me sale:

CS0234: No existe el tipo o espacio de nombres 'objetos' en el espacio de nombres 'System.Data' (¿falta una referencia de ensamblado)

me estoy apuntando .NET 4.5

mi construcción muestra este mensaje:? C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1561,5): advertencia MSB3247: conflictos encontrados entre diferentes versiones del mismo ensamblaje dependiente.

+1

No estoy del todo seguro de cuál es tu problema, pero supongo que mi primera pregunta sería ¿de todos modos puedes evitar interactuar con el objetocontexto desde la vista?En general, esta es una mala idea y viola las reglas de su vista al ser "tonto" en el patrón mvc. Debe evitar todo lo que no sea mostrar lógica específica en sus vistas. En una nota lateral, ¿puedes publicar tu vista (o partes de ella) para que pueda entender mejor tu problema? – theMothaShip

+0

Esto es lo que trato de hacer en la Vista: @ ObjectContext.GetObjectType (item.TimelineEntry.Document.GetType()). Name.ToString(); –

+0

Entonces, lo que probablemente está sucediendo es que algún otro ensamblado al que se haya referido en su proyecto hace referencia a una versión diferente del marco de la entidad, por lo tanto, por qué está recibiendo el mensaje en la pantalla de compilación. ¿Su aplicación es solo un archivo de proyecto o hay varios proyectos en la misma solución que todos pueden o no hacer referencia al marco de trabajo de la entidad? – theMothaShip

Respuesta

3

Si observa el mensaje de compilación, indica que se hace referencia a la versión 4.0 del .NET Framework ... ¿Hay alguna configuración en su archivo de proyecto o web/app.config que especifique una versión conflictiva del .NET Framework ?

¿Estás familiarizado con fuslog? puede configurarlo para registrar todos los enlaces de ensamblaje que .net está ejecutando mientras ejecuta su aplicación. Luego, debería poder ver información detallada sobre lo que se va a vincular cuando. Si todavía no puede resolverlo, siempre puede hacer una redirección de enlace en ese .dll en el web.config.

http://msdn.microsoft.com/en-us/library/eftw1fys.aspx - redirecciones de unión

http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx - Visor de registro de fusión

Configurar registrador de fusión y echar un vistazo a lo que la salida es. Si no obtiene una respuesta de eso, pruebe la redirección de enlace (que le daría al menos una solución temporal).

+0

No estoy seguro de cómo saber qué hace referencia a qué. Las propiedades del proyecto están haciendo referencia a .Net 4.5. ¿Cómo rastrear esto? Solo hay una DLL de System.Data.Entity en las referencias. –

+0

Parece que la vista está accediendo a la versión de Entity Framework 5 de system.data.entity y el controlador está accediendo a la versión 4, que tiene system.data.objects. ¿Cómo puedo 1) asegurarme de que todo el proyecto esté usando los nuevos ensamblajes? 2) Llegar al contexto del objeto en la versión 5 EF? –

+0

Extraño: el modelo tampoco tiene problemas para acceder a ObjectContext. –

28

Puede construir su solución en modo de diagnóstico para obtener información más detallada sobre el error.

Abra el cuadro de diálogo Opciones de VS (Herramientas> Opciones), navegue hasta el nodo "Proyectos y soluciones" y seleccione "Generar y ejecutar". Cambie la verbosidad de salida de compilación del proyecto MS Build a Diagnostic.

Echa un vistazo here.

+0

El modo de diagnóstico le dice exactamente qué dlls están extrayendo en las otras versiones también. Muy útil. – Laurence

+4

Solo una nota, una vez que obtenga el resultado de compilación, busque la palabra "conflicto" en la ventana de salida y encontrará el problema. –

0

En el directorio en el que estaba publicando, había una carpeta llamada aspnet_client. Lo moví (en lugar de eliminarlo), republicado y funcionó. No estoy seguro de por qué esa carpeta decidió darme problemas de la nada.

Cuestiones relacionadas