339 votos

Resolver MSB3247 - Encontrado conflictos entre diferentes versiones del mismo ensamblado dependiente

Un .NET 3.5 solución terminó con esta advertencia cuando se compila con msbuild.

A veces NDepend podría ayudar, pero en este caso no dio más detalles. Como Bob acabé teniendo que recurrir a la apertura de cada asamblea en ILDASM hasta que encontré la que se hace referencia a una versión anterior de los dependientes de la asamblea.

Yo lo hice trate de usar MSBUILD de VS 2010 Beta 2 (como el de Conectar artículo indicado esto fue corregido en la próxima versión del CLR), pero que no proporcionan más detalle (tal vez corregido el post de la Beta 2)

¿Hay una mejor (más automatizada) enfoque?

468voto

AMissico Puntos 12837

Cambiar el "proyecto de MSBuild de salida de la compilación nivel de detalle" a "Detalle" o superior. Para ello, siga estos pasos:

  1. Que aparezca el cuadro de diálogo Opciones (Herramientas -> Opciones...).
  2. En el árbol del panel izquierdo, seleccione los Proyectos y Soluciones de nodo y, a continuación, seleccione Crear y Ejecutar.
    • Nota: si este nodo no aparece, asegúrese de que la casilla de verificación en la parte inferior del cuadro de diálogo Mostrar toda la configuración está activada.
  3. En el menú herramientas/opciones de la página que aparece, configure el MSBuild proyecto de salida de la compilación de verbosidad nivel Detallado (asumiendo que estás en VS2010; Normal será suficiente en VS2008 o más).
  4. Genere el proyecto y buscar en la ventana de salida.

Retirar la MSBuild mensajes. La ResolveAssemblyReferences tarea, que es la tarea de la que MSB3247 origina, debe ayudar a depurar este tema en particular.

Mi caso particular fue una referencia incorrecta a SqlServerCe. Ver más abajo. Yo tenía dos proyectos haciendo referencia a dos versiones diferentes de SqlServerCe. Me fui para el proyecto con la versión anterior, se eliminó la referencia, luego se agregó la referencia correcta.

Target ResolveAssemblyReferences:
    Consider app.config remapping of assembly "System.Data.SqlServerCe, ..." 
        from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll] 
        to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll]
        to solve conflict and get rid of warning.
    C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets : 
        warning MSB3247: Found conflicts between different versions of the same dependent assembly.

Usted no tiene que abrir cada una asamblea para determinar las versiones de ensamblados de referencia.

  • Usted puede comprobar las Propiedades de cada Referencia.
  • Abra las propiedades del proyecto y comprobar las versiones de la sección de Referencias.
  • Abrir los proyectos con un Editor de Texto.
  • Uso .Net Reflector.

95voto

Noel Abrahams Puntos 3678

Mike Hadlow ha publicado una pequeña aplicación de consola llamada AsmSpy que bastante bien enumera las referencias de cada montaje:

 Reference: System.Net.Http.Formatting
        4.0.0.0 by Shared.MessageStack
        4.0.0.0 by System.Web.Http

Reference: System.Net.Http
        2.0.0.0 by Shared.MessageStack
        2.0.0.0 by System.Net.Http.Formatting
        4.0.0.0 by System.Net.Http.WebRequest
        2.0.0.0 by System.Web.Http.Common
        2.0.0.0 by System.Web.Http
        2.0.0.0 by System.Web.Http.WebHost
 

Esta es una manera mucho más rápida para llegar a la parte inferior de advertencia MSB3247, de acuerdo con la salida de MSBuild.

19voto

ErikHeemskerk Puntos 1048

Me pareció que (al menos en Visual Studio 2010) tiene que establecer el nivel de detalle de salida por lo menos detallada para poder identificar el problema.

Podría ser que mi problema era una referencia que antes era una referencia GAC, pero que ya no era el caso después de reinstalación de mi máquina.

6voto

RouR Puntos 1255

Esta advertencia se genera por defecto ASP.NET MVC 4 beta ver aquí

En cualquier lanzar esta Advertencia puede ser eliminado mediante la edición manual de la Archivo .csproj para su proyecto.

modificar........: Referencia Include="System.Net.Http"

leer ......: Referencia Include="System.Net.Http, Version=4.0.0.0"

4voto

Hamiora Puntos 171

Yo tenía este problema y se utiliza AMissico del consejo también se descubra el problema (Aunque tuvo que ajustar el nivel de verbosidad de detalle.

El problema era en realidad muy sencillo, aunque después de encontrar el culpable.

Antecedentes: He actualizado mi proyecto de VS2008 para VS2010. En VS2008 en el marco de destino fue de 3,5 y cuando me lo trajeron en VS2010 me cambié a 4 (Completa). También he actualizado algunos de los componentes de terceros, incluyendo los informes de Crystal.

Resultó que, en la mayoría de Sistema de referencias donde señalar que en la versión 4.0.0.0 pero un par no había sido cambiaron de forma automática (Sistema y System.Web.Services) y todavía estaban buscando en 2.0.0.0. Los informes de Crystal que se hace referencia 4.0.0.0 y así que este era el lugar donde los conflictos se están produciendo. Simplemente colocando el cursor en la primera biblioteca del Sistema en el explorador de soluciones, el cursor abajo de la lista y en busca de cualquier referencia a 2.0.0.0, quitar y volver a agregar nuevos 4.0.0.0 versión hizo el truco.

El extraño de este fue que la mayoría de las referencias ha sido correctamente actualizada y si no fuera por los informes de Crystal, yo probablemente nunca había notado...

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X