Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe la advertencia MSB3277.
Texto del mensaje
MSB3277: Found conflicts between different versions of 'assembly-name' that could not be resolved.
Descripción
Esta advertencia se produce durante una compilación cuando se hace referencia a más de una versión del mismo ensamblado dependiente en una compilación del mismo proyecto. En una compilación de .NET, todos los ensamblados a los que se hace referencia, directa o indirectamente a través de otros ensamblados a los que se hace referencia, tienen que resolverse en la misma versión. No debe hacer referencia a dos versiones diferentes y conflictivas del mismo ensamblado al compilar el mismo binario. La tarea ResolveAssemblyReference emite esta advertencia. La tarea inspecciona todos los ensamblados a los que se hace referencia y todos los ensamblados a los que hace referencia indirectamente esos ensamblados, etc. La tarea sigue el proceso hasta que se resuelven todas las referencias de ensamble.
Diagnóstico de la advertencia
Para diagnosticar el problema, habilite primero la salida del registro de diagnóstico mediante el -verbosity:diag
modificador de línea de comandos y, a continuación, compruebe el archivo de registro de MSBuild con la salida de diagnóstico completa. Para registros de salida más largos en proyectos grandes, considere la posibilidad de usar el modificador de línea de comandos del registro -bl
binario y el Visor de registros estructurados de MSBuild para ver la salida con más facilidad.
En MSBuild 16.x o posterior, las versiones de ensamblado específicas en conflicto se escriben en el archivo de registro. En versiones anteriores de MSBuild, el contenido no se agrega al archivo de registro. En su lugar, siga la cadena de dependencias del ensamblado para buscar la referencia en conflicto. Examine cada ensamblado al que hace referencia el proyecto y, a continuación, los ensamblados a los que hacen referencia los ensamblados iniciales, etc. Siga este proceso hasta que identifique las versiones de ensamblado en conflicto.
El registro de diagnóstico debe identificar las versiones de ensamblado específicas que están en conflicto y las razones de los conflictos. Por ejemplo, una referencia a assembly1.dll, que hace referencia aassembly2.dll versión x, pero también hace referencia aassembly2.dll versión y. MSBuild no puede determinar qué versión se va a usar para el ensamblado.
El ejemplo siguiente es un extracto de un registro de diagnóstico que muestra un conflicto entre dos versiones de StreamJsonRpc
:
There was a conflict between "StreamJsonRpc, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "StreamJsonRpc, Version=2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
"StreamJsonRpc, Version = 2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "StreamJsonRpc, Version=2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.
References which depend on "StreamJsonRpc, Version = 2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll].
C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll".
C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll
C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll".
C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.15.0\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.15.0.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.datadesign.common\16.0.28321-alpha\lib\net472\Microsoft.VisualStudio.DataDesign.Common.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.projectsystem\16.2.133-pre\lib\net472\Microsoft.VisualStudio.ProjectSystem.VS.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.design\16.0.28316-pre\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
C:\Users\user\.nuget\packages\microsoft.vsdesigner\16.0.28321-alpha\lib\net472\Microsoft.VSDesigner.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll".
C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.editor\16.0.428\lib\net472\Microsoft.VisualStudio.Editor.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll".
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll".
C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.imaging\16.4.29317.144\lib\net472\Microsoft.VisualStudio.Imaging.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.15.0\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.15.0.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.datadesign.common\16.0.28321-alpha\lib\net472\Microsoft.VisualStudio.DataDesign.Common.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.projectsystem\16.2.133-pre\lib\net472\Microsoft.VisualStudio.ProjectSystem.VS.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.design\16.0.28316-pre\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.framework\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.Framework.dll
C:\Users\user\.nuget\packages\microsoft.vsdesigner\16.0.28321-alpha\lib\net472\Microsoft.VSDesigner.dll
References which depend on "StreamJsonRpc, Version = 2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [].
También puede establecer la variable de entorno MSBuildDebugEngine
en 1 para obtener todos los registros posibles. Para obtener más información, vea Building MSBuild for the .NET Framework - Logs (Compilación de MSBuild para .NET Framework: registros).
Resolución
La forma de resolver este problema depende de los requisitos de configuración del proyecto y dependencia de ensamblado:
- Actualice la versión de un ensamblado en disco mediante la actualización o reinstalación de un paquete NuGet o un SDK.
- Actualice todos los paquetes a las versiones más recientes con el
Update-Package -reinstall
comando en la consola del Administrador de paquetes para Visual Studio. Para obtener más información, consulte Reinstalar y actualizar paquetes. - En el caso de los proyectos con varias versiones de un ensamblado al que se hace referencia en el disco, actualice el proyecto o las dependencias para hacer referencia a la versión más reciente del ensamblado en conflicto instalado. La caché global de ensamblados (GAC) también puede ser fuente de un posible conflicto, en casos en los que se hace referencia a una versión específica de un ensamblado, pero la GAC la invalida. Para obtener más información, consulte Caché global de ensamblaje.
Componentes externos
Si el conflicto está en un componente que no es de Microsoft, es posible que el componente no se admita con la versión del ensamblado en conflicto que usa en el proyecto. Compruebe el proveedor del otro componente para ver si ofrecen una versión actualizada y compatible. Si una corrección no está disponible, es posible que la solución cambie la versión del ensamblado en conflicto al que hace referencia para que coincida con la versión que usa el otro componente.
Redirecciones de enlaces
En algunos casos, es posible que el proyecto especifique o necesite especificar redireccionamientos de enlace, lo que fuerza las llamadas a usar una versión especificada de un ensamblado. Para obtener más información, consulte Redireccionamiento de versiones de ensamblado para entender cómo funcionan las redirecciones de enlace.
Visual Studio o la configuración de los archivos de proyecto pueden habilitar o deshabilitar el redireccionamiento automático de enlaces. Para obtener más información, consulte Habilitación y deshabilitación del redireccionamiento automático de enlaces. Compruebe la configuración y asegúrese de comprender cómo y por qué el proyecto usa redireccionamientos de enlace.
Se han cargado varias versiones del ensamblaje
En escenarios avanzados, el proyecto podría requerir intencionadamente más de una versión del mismo ensamblado. Para lograr el objetivo, puede usar técnicas especiales para invalidar el proceso normal de carga de ensamblados. Para obtener más información, consulte Resolución de cargas de ensamblajes. Asegúrese de comprender y seguir las pautas en Procedimientos recomendados para la carga de ensamblados.
Para obtener una guía sobre cómo resolver problemas con las referencias de ensamblado, consulte Solución de problemas de referencias de ensamblado y Cómo el entorno de ejecución busca ensamblados.
Se aplica a
Todas las versiones de MSBuild