Advertencia: Se encontraron conflictos entre diferentes versiones del mismo ensamblado dependiente

Resuelto ollifant asked hace 16 años • 21 respuestas

Actualmente estoy desarrollando una aplicación .NET, que consta de 20 proyectos. Algunos de esos proyectos se compilan usando .NET 3.5, otros siguen siendo proyectos .NET 2.0 (hasta ahora no hay problema).

El problema es que si incluyo un componente externo siempre me sale el siguiente aviso:

Se encontraron conflictos entre diferentes versiones del mismo ensamblado dependiente.

¿Qué significa exactamente esta advertencia? ¿Existe tal vez la posibilidad de excluirla (como usar #pragma enable en los archivos de código fuente)?

ollifant avatar Aug 20 '08 19:08 ollifant
Aceptado

Esta advertencia significa que dos proyectos hacen referencia al mismo ensamblaje (p. ej System.Windows.Forms.), pero los dos proyectos requieren versiones diferentes. Tienes pocas opciones:

  1. Vuelva a compilar todos los proyectos para usar las mismas versiones (por ejemplo, mueva todos a .Net 3.5). Esta es la opción preferida porque todo el código se ejecuta con las versiones de las dependencias con las que se compilaron.

  2. Agregue una redirección vinculante . Esto suprimirá la advertencia. Sin embargo, sus proyectos .Net 2.0 (en tiempo de ejecución) estarán vinculados a las versiones .Net 3.5 de ensamblados dependientes como System.Windows.Forms. Puede agregar rápidamente una redirección vinculante haciendo doble clic en el error en Visual Studio.

  3. Usar CopyLocal=true. No estoy seguro de si esto suprimirá la advertencia. Al igual que la opción 2 anterior, significará que todos los proyectos utilizarán la versión .Net 3.5 de System.Windows.Forms.

Aquí hay un par de formas de identificar las referencias ofensivas:

  • Puede utilizar una utilidad como la que se encuentra en https://gist.github.com/1553265
  • Otro método simple es configurar el detalle de la salida de compilación (Herramientas, Opciones, Proyectos y soluciones, Compilación y ejecución, Detalle de la salida de compilación del proyecto MSBuild, Detallado) y después de compilar, busque la advertencia en la ventana de salida y mire el texto justo encima. . (Un saludo a pauloya , quien sugirió esto en los comentarios de esta respuesta) .
Brian Low avatar Jan 26 '2010 05:01 Brian Low

Básicamente, esto sucede cuando los ensamblados a los que hace referencia tienen "Copiar local" configurado en "Verdadero", lo que significa que una copia de la DLL se coloca en la carpeta bin junto con su archivo ejecutable.

Dado que Visual Studio también copiará todas las dependencias de un ensamblado al que se hace referencia, es posible terminar con dos compilaciones diferentes del mismo ensamblado al que se hace referencia. Es más probable que esto suceda si sus proyectos están en soluciones separadas y, por lo tanto, pueden compilarse por separado.

La forma en que lo he solucionado es establecer Copiar local en Falso para referencias en proyectos de ensamblaje. Hágalo solo para ejecutables/aplicaciones web donde necesite el ensamblaje para ejecutar el producto terminado.

¡Espero que tenga sentido!

Matt Hamilton avatar Aug 20 '2008 12:08 Matt Hamilton