versiones que pudieron mismo microsoft entre ensamblado encontraron diferentes dependiente csharp conflictos .net msbuild clr ndepend

.net - que - Resolviendo MSB3247-Se encontraron conflictos entre diferentes versiones del mismo ensamblaje dependiente



se encontraron conflictos entre diferentes versiones de microsoft.csharp que no se pudieron resolver (14)

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 dio más detalles. Al igual que Bob, tuve que recurrir a abrir cada ensamblaje 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 el artículo de Connect indicó que esto se solucionó en la próxima versión de CLR), pero eso tampoco proporcionó más detalles (tal vez se corrigió la versión Beta 2)

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


Usa un lector de dependencia.

Usando dep.exe puedes enumerar todas las dependencias anidadas de una carpeta completa. Combinado con herramientas de Unix como grep o awk, puede ayudarlo a resolver su problema

Búsqueda de ensamblajes referenciados en más de una versión

$ dep | awk ''{ print $1 " " $2; print $4 " " $5 }'' | awk ''{ if (length(versions[$1]) == 0) versions[$1] = $2; if (versions[$1] != $2) errors[$1] = $1; } END{ for(e in errors) print e } '' System.Web.Http

Esta línea de comando oscura ejecuta dep.exe y luego canaliza la salida dos veces para volver a awk

  • ponga el padre y el hijo en una sola columna (de forma predeterminada, cada línea contiene un padre y un hijo para expresar el hecho de que este padre depende de ese hijo)
  • luego haga una especie de ''grupo'' usando una matriz asociativa

Entendiendo cómo este ensamblaje fue jalado en tu contenedor

$ dep myproject/bin | grep -i System/.Web/.Http MyProject-1.0.0.0 >> System.Web.Http.Web-5.2.3.0 2 ( FooLib-1.0.0.0 ) MyProject-1.0.0.0 >> System.Web.Http.Web-4.0.0.0 2 ( BarLib-1.0.0.0 ) FooLib-1.0.0.0 > System.Web.Http.Web-5.2.3.0 1 BarLib-1.0.0.0 > System.Web.Http.Web-4.0.0.0 1

En este ejemplo, la herramienta le mostrará que System.Web.Http 5.2.3 proviene de su dependencia de FooLib, mientras que la versión 4.0.0 proviene de BarLib.

Entonces tienes la opción entre

  • Convencer a los dueños de las bibliotecas de usar la misma versión.
  • dejar de usar uno de ellos
  • agregando redirecciones de enlace en su archivo de configuración para usar la última versión

Cómo ejecutar estas cosas en Windows

Si no tiene un shell de tipo Unix, deberá descargar uno antes de poder ejecutar awk y grep . Pruebe uno de los siguientes


Visual Studio para Mac, además de la comunidad:

Como la respuesta de AMissico requiere cambiar el nivel de registro, y ni ASMSpy ni ASMSpyPlus están disponibles como una solución multiplataforma, aquí hay una breve adición para Visual Studio para Mac:

https://docs.microsoft.com/en-us/visualstudio/mac/compiling-and-building

Está en la comunidad de Visual Studio → Preferencias ... → Proyectos → Crear registro → verbosidad


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

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

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

Echa un vistazo a los mensajes de MSBuild. La tarea ResolveAssemblyReferences , que es la tarea a partir de la cual se origina MSB3247, debería ayudarlo a solucionar este problema en particular.

Mi caso específico fue una referencia incorrecta a SqlServerCe. Vea abajo. Tuve dos proyectos que hacen 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 conjunto para determinar las versiones de los conjuntos referenciados.

  • Puedes consultar las Propiedades de cada Referencia.
  • Abra las propiedades del proyecto y verifique las versiones de la sección Referencias.
  • Abre los proyectos con un editor de texto.
  • Utilice .Net Reflector.

Como se mencionó here , debe eliminar las referencias no utilizadas y las advertencias irán.


Descubrí que (al menos en Visual Studio 2010) necesita establecer la verbosidad de la salida en al menos Detallada para poder detectar el problema.

Puede ser que mi problema fuera una referencia que anteriormente era una referencia de GAC, pero que ya no era el caso después de la reinstalación de mi máquina.


El administrador de compilación de ASP.NET está construyendo el sitio web yendo a través de las carpetas alfabéticamente, y para cada carpeta determina sus dependencias y crea las dependencias primero y luego la carpeta seleccionada.

En este caso, la carpeta problemática que es ~ / Controles, se selecciona para compilarse al principio, por una razón aún desconocida, construye algunos de los controles allí como un conjunto separado en lugar de dentro del mismo conjunto que otros controles (parece estar conectado al hecho de que algunos controles dependen de otros controles en la misma carpeta).

Luego, la siguiente carpeta que se construye (~ / File-Center / Control) depende de la carpeta raíz ~ / que depende de ~ / Controls, por lo que la carpeta ~ / Controls se está compilando nuevamente solo esta vez, los controles que se separaron a su propio ensamblaje ahora se unen al mismo ensamblaje que otros controles con el ensamblaje separado aún referenciado.

Entonces, en este punto 2, el ensamblaje (al menos) tiene los mismos controles y la compilación falla.

Aunque todavía no sabemos por qué sucedió esto, pudimos solucionarlo cambiando el nombre de la carpeta de Controles a ZControls, de esta manera no se crea antes de ~ / File-Center / Control, solo después y de esta manera se crea como debería.


En algún momento la respuesta de @Missico 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 estos 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. Encuentre el texto: warning MS... o la información de advertencia específica: (por ejemplo, línea 9293) Found conflicts between different versions... y el detalle completo del error de conflicto estará arriba de este mensaje (por ejemplo, línea 9277). There was a conflicts between...

Visual Studio 2013


Esta advertencia se generó para ASP.NET MVC 4 beta predeterminado, consulte aquí

En, cualquier emisión de esta Advertencia puede eliminarse editando manualmente el archivo .csproj para su proyecto.

modifique ........: La referencia incluye = "System.Net.Http"

para leer ......: La referencia incluye = "System.Net.Http, Version = 4.0.0.0"


Hice una aplicación basada en la aplicación de Mike Hadlow: AsmSpy .

Mi aplicación es una aplicación WPF con GUI y se puede descargar desde el servidor web de mi casa: AsmSpyPlus.exe .

El código está disponible en: GitHub


La forma más sencilla sin tener en cuenta las dependencias (internas):

  1. Abra el "Explorador de soluciones".
  2. Haga clic en "Mostrar todos los archivos"
  3. Expandir "Referencias"
  4. Verá una (o más) referencia (s) con un icono ligeramente diferente al resto. Por lo general, es con un cuadro amarillo que sugiere tomar nota de ello. Sólo quítalo.
  5. Agregue la referencia de nuevo y compile su código.
  6. Eso es todo.

En mi caso, hubo un problema con la referencia de MySQL. De alguna manera, podría enumerar tres versiones de la misma en la lista de todas las referencias disponibles. Seguí el proceso 1 al 6 anterior y funcionó para mí.


Mike Hadlow ha publicado una pequeña aplicación de consola llamada AsmSpy que enumera bastante 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.


También tuve este problema y utilicé el consejo de AMissico para descubrir el problema (aunque tenía que establecer el nivel de verbosidad en Detallado).

El problema era en realidad bastante sencillo aunque después de encontrar al culpable.

Antecedentes: actualicé mi proyecto de VS2008 a VS2010. En VS2008, el marco objetivo era 3.5 y cuando lo incorporé a VS2010 lo cambié a 4 (Completo). También actualicé algunos componentes de terceros, incluidos los informes de Crystal.

Resultó que la mayoría de las referencias del sistema apuntaban a la versión 4.0.0.0, pero un par no se había cambiado automáticamente (System and System.Web.Services) y seguían mirando 2.0.0.0. Los informes de Crystal hacen referencia a 4.0.0.0 y, por lo tanto, esto era donde estaban ocurriendo los conflictos. Simplemente coloque el cursor en la primera biblioteca del sistema en el explorador de soluciones, deslice el cursor hacia abajo en la lista y busque cualquier referencia a 2.0.0.0, eliminando y volviendo a agregar la versión 4.0.0.0 más reciente funcionó.

Lo extraño era que la mayoría de las referencias se habían actualizado correctamente y, de no ser por los informes de Crystal, probablemente nunca lo habría notado ...


Tuve el mismo error y no pude resolverlo con las otras respuestas. Encontré que podemos "consolidar" los paquetes de NuGet.

  1. Haga clic derecho en la solución
  2. Haga clic en Administrar paquetes Nuget
  3. Consolidar pestaña y actualizar a la misma versión.

Arreglo rapido:

Haga clic con el botón derecho en la solución -> Administrar paquetes NuGet para la solución -> En Consolidar puede ver si hay diferentes versiones del mismo paquete instaladas. Desinstala diferentes versiones e instala la última.