Advertencia:Encuentra los conflictos entre las diferentes versiones de la misma dependiente de la asamblea

StackOverflow https://stackoverflow.com/questions/17806

  •  09-06-2019
  •  | 
  •  

Pregunta

Actualmente estoy desarrollando un .NETO de la aplicación, que consta de 20 proyectos.Algunos de esos proyectos se compilan utilizando .NET 3.5, algunos otros están todavía .NET 2.0 proyectos (hasta el momento ningún problema).

El problema es que si tengo que incluir un componente externo siempre me sale la siguiente advertencia:

"Found conflicts between different versions of the same dependent assembly".

Exactamente lo que hace esta advertencia significa y es que hay tal vez una posibilidad de excluir a esta advertencia (como el uso de #pragma deshabilitar en el código fuente de archivos)?

¿Fue útil?

Solución

Esta advertencia significa que dos proyectos de referencia de la misma asamblea (por ejemplo, System.Windows.Forms), pero los dos proyectos requieren diferentes versiones.Usted tiene un par de opciones:

  1. Vuelva a compilar todos los proyectos el uso de las mismas versiones (por ejemplo,mover a todos .Net 3.5).Esta es la opción preferida, ya que todo el código se ejecuta con las versiones de las dependencias que fueron compilados con.

  2. Añadir un redirección de enlace.Esto va a suprimir la advertencia.Sin embargo, su .Net 2.0 proyectos (en tiempo de ejecución) someterse a el .Net 3.5 versiones de ensamblados dependientes, tales como System.Windows.Forms.Usted puede agregar rápidamente una redirección de enlace, haciendo doble clic sobre el error en Visual Studio.

  3. Uso CopyLocal=true.No estoy seguro de si esto va a suprimir la advertencia.Lo hará, al igual que la opción 2 anterior, significa que todos los proyectos de uso de la .Net 3.5 versión de Sistema.Windows.Los formularios.

Aquí hay un par de formas para identificar a los infractores de referencia(s):

  • Puede utilizar una utilidad como la que se encuentra en https://gist.github.com/1553265
  • Otro método sencillo es establecer Construir salida de nivel de detalle (Herramientas, Opciones, Proyectos y Soluciones, Construir y Ejecutar, MSBuild proyecto de salida de la compilación de verbosidad, Detallado) y después de el edificio, de búsqueda de la ventana de salida de la advertencia, y mirar el texto justo encima de él. (Sombrero de punta pauloya quien sugirió esta en la comentarios sobre esta respuesta).

Otros consejos

Básicamente esto sucede cuando las asambleas estás referencia a tener "Copia Local" establecido en "True", lo que significa que una copia del archivo DLL se coloca en la carpeta bin junto con su exe.

Desde Visual Studio copia de todas las dependencias de una referencia de ensamblado así, es posible terminar con dos diferentes versiones de la misma asamblea se refiere.Esto es más probable que ocurra si los proyectos son en soluciones separadas, y por lo tanto puede ser compilado por separado.

La forma en que me he metido en torno a la Copia Local a False para referencias en proyectos de montaje.Sólo lo hacen para los ejecutables/web aplicaciones donde se necesita la asamblea para que el producto terminado a ejecutar.

Espero que tenga sentido!

Quería publicar pauloya la solución que proporciona en los comentarios de arriba.Creo que es la mejor solución para encontrar el infractor referencias.

La forma más sencilla de encontrar lo que son las "ofensas a la referencia(s)" es conjunto de salida de la Compilación de verbosidad (Herramientas, Opciones, Proyectos y Soluciones, Construir y Ejecutar, MSBuild proyecto de salida de la compilación de verbosidad, Detallado) y después de la construcción, de búsqueda de la ventana de salida de la advertencia.Ver el texto justo encima de él.

Por ejemplo, cuando se busca en el panel de salida para "conflicto", usted puede encontrar algo como esto:

3>  There was a conflict between "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
3>      "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was not.

Como usted puede ver, hay un conflicto entre EF versiones 5 y 6.

Yo tenía el mismo problema con uno de mis proyectos, sin embargo, ninguno de los anteriores ayudó a resolver la advertencia.He comprobado el montaje detalladas de archivo de registro, he utilizado AsmSpy para comprobar que he utilizado las versiones correctas para cada proyecto en la solución, he vuelto a revisar las entradas en cada archivo de proyecto - nada ayudó.

Finalmente resultó que el problema era de un entramado de dependencia de una de las referencias que he tenido en un proyecto.Esta referencia (A) a su vez requiere una versión diferente de (B) la que se hace referencia directamente de todos los otros proyectos en mi solución.La actualización de la referencia en el proyecto referenciado resuelto.

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

Espero que los de arriba muestra lo que quiero decir, tomó mi un par de horas para averiguarlo, así que espero que alguien más se benefician.

En Visual Studio, si hace clic derecho en la solución y Administrar paquetes de nuget hay un "Consolidar" la ficha que establece que todos los paquetes a la misma versión.

Yo sólo tenía este mensaje de advertencia y se limpia la solución y volver a compilar (Build -> Solución Limpia) y se me pasó.

Yo tenía el mismo problema y lo he resuelto cambiando el siguiente en la web.config.

A mi me pasó porque yo soy la ejecución de la aplicación utilizando Newtonsoft.Json 4.0

De:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

A:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

Esto realmente depende de su componente externo.Cuando se hace referencia a un componente externo en una .NET aplicación genera un GUID para identificar que componente.Este error se produce cuando el componente externo que hace referencia a uno de sus proyectos tiene el mismo nombre pero diferente versión como otro componente de otro conjunto.

Esto ocurre a veces cuando se utiliza "Examinar" para buscar referencias y agregue la versión incorrecta de la asamblea, o tiene una versión diferente de la componente en su repositorio de código con el que se ha instalado en la máquina local.

Trate de encontrar proyectos que tienen estos conflictos, quitar los componentes de la lista de referencia, a continuación, agregarlos de nuevo, asegurándose de que usted está apuntando para el mismo archivo.

Yo tengo otra manera de hacer esto si usted está usando Nuget para administrar sus dependencias.He descubierto que a veces VS y Nuget no coinciden y Nuget es incapaz de reconocer que sus proyectos están fuera de sincronía.Los paquetes.config va a decir una cosa, pero la ruta que se muestra en las Referencias de las Propiedades se indique otra cosa.

Si usted está dispuesto a actualizar sus dependencias, hacer lo siguiente:

  1. Desde el Explorador de soluciones, haga clic derecho en el Proyecto y haga clic en 'Administrar Los Paquetes De Nuget'

  2. Seleccione 'paquetes Instalados" pestaña en el panel de la izquierda de Registro instalados en su los paquetes puede Que desee copiar los paquetes.config para su escritorio en primer lugar, si usted tiene un montón, así que usted puede verificar con Google a ver qué Nuget pkgs están instalados

  3. Desinstalación de los paquetes.Su OK, vamos a agregarlos a la derecha de nuevo.

  4. Inmediatamente instalar los paquetes que necesita.Lo Nuget hacer es no sólo obtener la versión más reciente, pero va a alterar sus referencias, y también agregar el enlace redirige para usted.

  5. Hacer esto para todos sus proyectos.

  6. En el ámbito de la solución, hacer una Limpieza y Reconstrucción.

Puede que quieras empezar con la parte inferior de los proyectos y su forma de trabajo a los de nivel superior, y la reconstrucción de cada proyecto a medida que avanza.

Si usted no desea actualizar sus dependencias, a continuación, puede utilizar la consola del administrador de paquetes, y el uso de la sintaxis de la Actualización del Paquete -ProjectName [yourProjectName] [packageName] Versión [número de versión]

=> verificar que habrá algún ejemplo de aplicación instalado parcialmente.

=> lo primero de todo, desinstale esa instancia de desinstalar la aplicación.

=> a continuación,limpiar,Reconstruir,y tratar de implementar.

esta solucionado mi problema.espero que le ayuda demasiado.Saludos.

También tenía este problema en mi caso fue causada por la "Versión Específica" de la propiedad en un número de referencias que se establece en true.Cambiar a false en esas referencias resuelto el problema.

Esto me pasó a mí también.Una dll que se hace referencia en dos ocasiones:una vez directamente (en las referencias) y una vez indirectamente (hace referencia a otro proyecto referenciado).He quitado la referencia directa, limpia y reconstruido solución.Problema fijo.

  1. Abrir "Explorador De Soluciones".
  2. Haga clic en "Mostrar todos los archivos"
  3. Expanda "Referencias"
  4. Verás una (o más) referencia(s) con el icono ligeramente diferente que el resto.Normalmente, es con el recuadro amarillo que sugiere que usted tome nota de ella.Quite la.
  5. Agregar la referencia y compilar el código.
  6. Eso es todo.

En mi caso, hay un problema con la referencia de MySQL.De alguna manera, yo podría hacer una lista de tres versiones de la misma, bajo la lista de todas las referencias disponibles;para .net 2.0, .net 4.0 y .net 4.5.He seguido el proceso de 1 a 6 anteriores y que trabajó para mí.

Otra cosa a considerar y control es asegurarse de que usted no tiene ninguna ejecución del servicio que el uso de esa carpeta bin.si se detiene el servicio y la reconstrucción de la solución

No parece ser un problema en Mac Visual Studio cuando la edición .resx archivos.Yo no sé realmente lo que pasó, pero tengo este problema tan pronto como he editado algunos .resx archivos de mi Mac.Abrí el proyecto en Windows, abre los archivos y se fueron como si ellos no han sido editados.Así que he editado de ellos, salvo, y todo empezó a funcionar de nuevo en Mac también.

Tuve problema cuando mi proyecto tenía referencia a NETStandardLibrary y uno de los ensamblados de referencia fue publicado para netcore.Acaba de ser publicado como netstandard y el problema se había ido

Si usando NuGet todo lo que tenía que hacer era:

  1. haga clic en proyecto y haga clic en Administrar Paquetes de NuGet..

  2. haga clic en la rueda dentada en la parte superior derecha

  3. haga clic en el General ficha en NuGet Package Manager por encima de las Fuentes de Paquetes

  4. marque "Omitir la Aplicación de enlace redirige" en la Unión Redirecciones

  5. Limpiar y reconstruir, y la advertencia se ha ido

Easy peasy

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top