Resolución de MSB3247: conflictos encontrados entre diferentes versiones del mismo ensamblado dependiente

Resuelto David Gardiner asked hace 14 años • 16 respuestas

Una solución .NET 3.5 terminó con esta advertencia al compilar con msbuild.

A veces, NDepend podría ayudar, pero en este caso no proporcionó más detalles. como bob terminé teniendo que recurrir a abrir cada ensamblado en ILDASM hasta que encontré el que hacía referencia a una versión anterior del ensamblado dependiente.

Intenté usar MSBUILD de VS 2010 Beta 2 (como indicaba el artículo de Connect, esto se solucionó en la próxima versión de CLR), pero tampoco proporcionó más detalles (tal vez se corrigió después de Beta 2).

¿Existe un enfoque mejor (más automatizado)?

David Gardiner avatar Dec 09 '09 08:12 David Gardiner
Aceptado

Cambie el "Detalle de la salida de la compilación del proyecto MSBuild" a "Detallado" o superior. Para hacer esto, siga estos pasos:

  1. Abra el cuadro de diálogo Opciones ( Herramientas -> Opciones... ).
  2. En el árbol de la izquierda, seleccione el nodo Proyectos y soluciones y luego seleccione Construir 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 todas las configuraciones esté marcada.
  3. En la página de herramientas/opciones que aparece, establezca el nivel de detalle de la salida de compilación del proyecto MSBuild en la configuración adecuada según su versión:

    • Diagnóstico en VS2012, VS2013 o VS2015 (el mensaje en estas versiones dice que debe usar "Detallado", pero esto es completamente incorrecto, debe usar "Diagnóstico" )
    • Detallado cuando estás en VS2010
    • Normal será suficiente en VS2008 o anterior.
  4. Construya el proyecto y mire en la ventana de resultados.

Consulte los mensajes de MSBuild. La ResolveAssemblyReferencestarea, que es la tarea que origina MSB3247, debería ayudarle a depurar este problema en particular.

Mi caso específico fue una referencia incorrecta a SqlServerCe. Vea abajo. Tenía dos proyectos que hacían referencia a dos versiones diferentes de SqlServerCe. Fui al proyecto con la versión anterior, eliminé la referencia y luego agregué 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.

No es necesario abrir cada ensamblado para determinar las versiones de los ensamblados a los que se hace referencia.

  • Puedes consultar las Propiedades de cada Referencia.
  • Abra las propiedades del proyecto y verifique las versiones de la sección Referencias.
  • Abra los proyectos con un editor de texto.
  • Utilice .Net Reflector.
AMissico avatar Jan 30 '2010 21:01 AMissico

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

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 forma mucho más rápida de llegar al final de la advertencia MSB3247 que depender de la salida de MSBuild.

En algún momento la respuesta de @AMissico no es suficiente. En mi caso, no pude encontrar el error en las ventanas de Salida, así que decidí crear un archivo de registro y analizarlo siguiendo los siguientes pasos:

  1. Guardando el registro de compilación en un archivo... https://msdn.microsoft.com/en-us/library/ms171470.aspx

    msbuild MyProject.proj /fl /flp:logfile=MyProjectOutput.log;verbosity=detailed

  2. Busque el texto: warning MS...o la información de advertencia específica: (por ejemplo, línea 9293) Found conflicts between different versions...y los detalles completos del error de conflicto estarán arriba de este mensaje (por ejemplo, línea 9277).There was a conflicts between... Encuentra el mensaje de error

Estudio visual 2013

Jaider avatar Sep 10 '2015 21:09 Jaider