Una solución .NET 3.5 terminó con esta advertencia al compilar con msbuild.
A veces, NDepend puede ayudar, pero en este caso no dio más detalles. Al igual que Bob , terminé teniendo que recurrir a la apertura de cada ensamblaje en ILDASM hasta que encontré el que hacía referencia a una versión anterior del ensamblaje dependiente.
Intenté usar MSBUILD de VS 2010 Beta 2 (como el artículo de Connect indicaba que esto se solucionó en la próxima versión del CLR) pero eso tampoco proporcionó más detalles (tal vez solucionado después de Beta 2)
¿Existe un enfoque mejor (más automatizado)?
Respuestas:
Cambie el "nivel de detalle de salida de compilación del proyecto MSBuild" a "Detallado" o superior. Para hacer esto, siga estos pasos:
En la página de herramientas / opciones que aparece, configure el detalle de salida de compilación del proyecto MSBuild en la configuración adecuada según su versión:
Echa un vistazo a los mensajes de MSBuild. los
ResolveAssemblyReferences
tarea, que es la tarea de la que se origina MSB3247, debería ayudarlo a depurar 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.
No tiene que abrir cada conjunto para determinar las versiones de los conjuntos referenciados.
fuente
Mike Hadlow ha publicado una pequeña aplicación de consola llamada AsmSpy que enumera bastante bien las referencias de cada ensamblaje:
Esta es una forma mucho más rápida de llegar al final de la advertencia MSB3247, que depender de la salida de MSBuild.
fuente
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:
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
Busque el texto:
warning MS...
o la información de advertencia específica: (por ejemplo, la línea 9293)Found conflicts between different versions...
y el detalle completo del error de conflicto estará arriba de este mensaje (por ejemplo, la línea 9277)There was a conflicts between...
Visual Studio 2013
fuente
Descubrí que (al menos en Visual Studio 2010) necesita establecer la verbosidad de salida en al menos Detallado para poder detectar el problema.
Es posible que mi problema fuera una referencia que anteriormente era una referencia de GAC, pero ese ya no era el caso después de la reinstalación de mi máquina.
fuente
Tuve el mismo error y no pude resolverlo con las otras respuestas. Descubrí que podemos "consolidar" los paquetes NuGet.
fuente
Esta advertencia generada para la versión beta de ASP.NET MVC 4 predeterminada, vea aquí
fuente
Use un lector de dependencia
Usando dep.exe puede enumerar todas las dependencias anidadas de una carpeta completa. Combinado con herramientas Unix como grep o awk, puede ayudarte a resolver tu problema
Encontrar conjuntos a los que se hace referencia en más de una versión
Esta oscura línea de comando ejecuta dep.exe y luego canaliza la salida dos veces para awk a
Comprender cómo esta asamblea se metió en su contenedor
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
Cómo ejecutar estas cosas en Windows
Si usted no tiene un tipo de UNIX que tendrá que descargar uno antes de ser capaz de correr
awk
ygrep
. Pruebe uno de los siguientesfuente
También tuve este problema y utilicé el consejo de AMissico para descubrir el problema (aunque tuve que establecer el nivel de verbosidad en Detallado.
Sin embargo, el problema fue bastante sencillo después de encontrar al culpable.
Antecedentes: actualicé mi proyecto de VS2008 a VS2010. En VS2008, el marco de destino era 3.5 y cuando lo introduje en 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 y System.Web.Services) y todavía estaban mirando 2.0.0.0. Crystal Reports hace referencia a 4.0.0.0, por lo que aquí es donde se producían los conflictos. Simplemente colocando el cursor en la primera biblioteca del Sistema en el explorador de soluciones, bajando el cursor por la lista y buscando referencias a 2.0.0.0, eliminando y volviendo a agregar la nueva versión 4.0.0.0 hizo el truco.
Lo extraño fue que la mayoría de las referencias se habían actualizado correctamente y si no fuera por los informes de Crystal, probablemente nunca me habría dado cuenta ...
fuente
Hice una aplicación basada en la aplicación 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
fuente
Como se mencionó aquí , debe eliminar las referencias no utilizadas y las advertencias desaparecerán.
fuente
ASP.NET build manager está construyendo el sitio web revisando las carpetas alfabéticamente, y para cada carpeta calcula sus dependencias y construye las dependencias primero y luego la carpeta seleccionada.
En este caso, la carpeta problemática que es ~ / Controls, se selecciona para crearse al principio, por una razón aún desconocida, construye algunos de los controles allí como un ensamblaje separado en lugar de dentro del mismo ensamblaje que otros controles (parece que 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 vuelve a construir solo esta vez los controles que se separaron a su propio ensamblaje ahora se unen al mismo ensamblaje que otros controles con el ensamblado separado que todavía se hace referencia.
Entonces, en este punto, el ensamblaje 2 (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 Controles a ZControls, de esta manera no se compila antes de ~ / File-Center / Control, solo después y de esta manera se construye como debería.
fuente
Arreglo rapido:
Haga clic derecho en la solución -> Administrar paquetes NuGet para la solución -> En Consolidar puede ver si se instalaron diferentes versiones del mismo paquete. Desinstale diferentes versiones e instale la última.
fuente
A veces
AutoGenerateBindingRedirects
no es suficiente (incluso conGenerateBindingRedirectsOutputType
). Buscar todas lasThere was a conflict
entradas y corregirlas manualmente una por una puede ser tedioso, por lo que escribí un pequeño fragmento de código que analiza la salida del registro y las genera para usted (vuelca astdout
):Consejo: use MSBuild Binary and Structured Log Viewer y solo genere redireccionamientos vinculantes para los conflictos en el proyecto que emite la advertencia (es decir, solo pasa esas
there was a conflict
líneas al archivo de texto de entrada para el código anterior [AssemblyConflicts.txt
]).fuente
Una forma más sencilla sin sin tener en cuenta las dependencias (internas):
En mi caso, hubo un problema con la referencia de MySQL. De alguna manera, podría enumerar tres versiones de este en la lista de todas las referencias disponibles. Seguí los procesos 1 a 6 anteriores y funcionó para mí.
fuente
Además de Visual Studio para Mac Community:
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 pequeña adición para Visual Studio para Mac:
Está en Visual Studio Community → Preferencias ... → Proyectos → Build Log → verbosity
fuente
Si tiene un compartidor, elimine toda referencia no utilizada en su solución.
fuente