Resolución de conflictos MSB3247-Encontrados entre diferentes versiones del mismo ensamblado dependiente


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 Terminé teniendo que recurrir a la apertura de cada asamblea en ILDASMA hasta que encontré la que hacía referencia a una versión más antigua de la asamblea dependiente.

Traté de usar MSBUILD de VS 2010 Beta 2 (como el artículo de Connect indicó que esto se arregló en la próxima versión del CLR), pero que no proporcionó más detalles tampoco (tal vez fijo post Beta 2)

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

Author: AMissico, 2009-12-09

14 answers

Cambie "MSBuild project build output verbosity" a "Detailed" o superior. Para hacer esto, siga estos pasos:

  1. Abre el diálogo de opciones ( Herramientas -> Opciones...).
  2. En el árbol de la izquierda, seleccione el nodo Projects and Solutions, y luego seleccione Build and Run.
    • Nota: si este nodo no aparece, asegúrese de que la casilla de verificación en la parte inferior del diálogo Mostrar todas las configuraciones está marcada.
  3. En el la página de herramientas/opciones que aparece, establece el nivel de verbosidad de salida de compilación del proyecto MSBuild a la configuración apropiada dependiendo de tu versión:

  4. Construya el proyecto y busque en la ventana de salida.

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

Mi caso específico fue una referencia incorrecta a SqlServerCe. Véase más adelante. 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, luego agregué la correcta referencia.

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 referenciados.

  • puede comprobar las Propiedades de cada Referencia.
  • Abra las propiedades del proyecto y compruebe las versiones de la sección Referencias.
  • Abra los proyectos con un Editor de texto.
  • Utilice.Net Reflector.
 562
Author: AMissico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:30

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

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 fondo de la advertencia MSB3247, que depender de la salida de MSBuild.

 127
Author: Noel Abrahams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-21 03:25:28

Descubrí que (al menos en Visual Studio 2010) necesita establecer el nivel de detalle de salida como mínimo para poder detectar el problema.

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

 21
Author: ErikHeemskerk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 14:59:45

En algún momento @AMissico la respuesta 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. Guardar 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... Buscar el mensaje de error

Visual Studio 2013

 18
Author: Jaider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 20:37:58

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

En, cualquier emisión de esta advertencia se puede eliminar mediante la edición manual de la .archivo csproj para su proyecto.

Modificar........: Reference Include= "System. Net. Http"

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

 7
Author: RouR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-25 09:02:45

Utilice un lector de dependencias

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

Búsqueda de ensamblajes a los que se hace referencia 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 oscura línea de comandos ejecuta dep.exe entonces canaliza la salida dos veces a awk a

  • ponga el padre y el hijo en una sola columna (por defecto 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 por ' usando una matriz asociativa

Entendiendo cómo esta asamblea se tiró en su 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á ese Sistema.Web.Http 5.2.3 proviene de su dependencia a FooLib, mientras que la versión 4.0.0 proviene de BarLib.

Entonces usted tiene la opción entre

  • convencer a los propietarios de las libs para que usen la misma versión
  • deja de usar uno de ellos
  • agregar redirecciones de enlace en su archivo de configuración para usar la última versión

Cómo ejecutar estas cosas en Windows

Si no tienes un shell de tipo unix necesitarás descargar uno antes de poder ejecutar awky grep. Pruebe uno de los siguientes

 6
Author: Manitra Andriamitondra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-07 05:08:23

Tuve el mismo error y no pude averiguarlo con las otras respuestas. Descubrí que podemos "Consolidar" paquetes NuGet.

  1. Haga clic derecho en la solución
  2. Haga clic en Administrar Paquetes Nuget
  3. Consolide la pestaña y actualice a la misma versión.
 5
Author: Carol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-19 22:08:22

También tuve este problema y también utilicé el consejo de AMissico para descubrir el problema (Aunque tuve que establecer el nivel de detalle a Detallado.

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

Fondo: Actualizé mi proyecto de VS2008 a VS2010. En VS2008 el marco objetivo era 3.5 y cuando lo traje a VS2010 lo cambié a 4 (Completo). También he actualizado algunos componentes de terceros, incluyendo Crystal reports.

Resultó que la mayor parte de Las referencias del sistema apuntaban a la versión 4.0.0.0 pero un par no había sido cambiado automáticamente (System y System.Web.Servicios) y todavía estaban buscando en 2.0.0.0. Crystal reports está haciendo referencia a la versión 4.0.0.0 y aquí es donde estaban ocurriendo los conflictos. Simplemente colocando el cursor en la primera biblioteca del Sistema en el explorador de soluciones, el cursor hacia abajo en la lista y buscando cualquier referencia a 2.0.0.0, eliminar y volver a agregar la versión 4.0.0.0 más reciente hizo el truco.

Lo extraño fue que la mayoría de las referencias se habían actualizado correctamente y si no fuera por Crystal reports, probablemente nunca me habría dado cuenta...

 4
Author: Hamiora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-02 17:15:31

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

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

El Código está disponible en: GitHub

Ejemplo de Gui

 2
Author: Eric Ouellet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 09:57:43

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

 2
Author: lex87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-09 23:32:52

ASP.NET build manager está construyendo el sitio web pasando por las carpetas alfabéticamente, y para cada carpeta calcula las dependencias y construye las dependencias primero y luego la carpeta seleccionada.

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

Entonces 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á construyendo de nuevo solo que esta vez los controles que se separaron a su propio ensamblado ahora se unen al mismo ensamblado que otros controles con el ensamblado separado aún siendo referenciado.

Así que en este punto 2 asamblea (al menos) tienen la los mismos controles y la compilación falla.

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

 1
Author: Mike Yinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-29 21:05:01

Solución Rápida:

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

 1
Author: JerryGoyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 06:08:30

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

  1. Abra "Explorador de soluciones".
  2. Haga clic en"Mostrar todos los archivos"
  3. Expandir "Referencias"
  4. Verás una (o más) referencia(s) con un icono ligeramente diferente al resto. Por lo general, es con caja amarilla que sugiere que tome nota de ella. Sólo quítalo.
  5. Añade la referencia y compila tu código.
  6. Eso es todo.

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

 0
Author: Sukhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-16 00:00:34

Visual Studio para Mac Comunidad adición:

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 Visual Studio Community → Preferencias... → Proyectos → Registro de compilación → verbosidad

 0
Author: SwiftArchitect,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-15 02:10:42