다음을 통해 공유


진단 코드 MSB3277

이 문서에서는 MSB3277 경고에 대해 설명합니다.

메시지 내용

MSB3277: Found conflicts between different versions of 'assembly-name' that could not be resolved.

설명

이 경고는 동일한 프로젝트의 빌드에서 동일한 종속 어셈블리의 버전이 둘 이상 참조되는 경우 빌드 중에 발생합니다. .NET 빌드에서 직접 참조하거나 다른 참조된 어셈블리를 통해 간접적으로 참조되는 모든 어셈블리는 동일한 버전으로 맞춰져야 합니다. 동일한 이진 파일을 빌드할 때 동일한 어셈블리의 서로 다르고 충돌하는 두 버전을 참조해서는 안 됩니다. ResolveAssemblyReference 작업은 이 경고를 내보낸다. 태스크는 참조된 모든 어셈블리와 해당 어셈블리에서 간접적으로 참조하는 모든 어셈블리 등을 검사합니다. 작업은 모든 어셈블리 참조가 해결될 때까지 프로세스를 통해 작동합니다.

경고 진단

문제를 진단하려면 먼저 명령줄 스위치를 사용하여 -verbosity:diag 진단 로그 출력을 사용하도록 설정한 다음 전체 진단 출력이 포함된 MSBuild 로그 파일을 확인합니다. 대규모 프로젝트에서 더 긴 출력 로그의 경우 이진 로그 -bl 명령줄 스위치와 MSBuild 구조적 로그 뷰어를 사용하여 출력을 더 쉽게 보는 것이 좋습니다.

MSBuild 16.x 이상에서는 충돌하는 특정 어셈블리 버전이 로그 파일에 기록됩니다. 이전 버전의 MSBuild에서는 콘텐츠가 로그 파일에 추가되지 않습니다. 대신 어셈블리 종속성 체인에 따라 충돌하는 참조를 찾습니다. 프로젝트에서 참조하는 각 어셈블리와 초기 어셈블리가 참조하는 어셈블리 등을 살펴봅니다. 충돌하는 어셈블리 버전을 식별할 때까지 이 프로세스를 따릅니다.

진단 로그는 충돌하는 특정 어셈블리 버전과 충돌 원인을 식별해야 합니다. 예를 들어 assembly1.dllassembly2.dll 버전 x를 참조하지만, assembly2.dll 버전 y도 참조합니다. MSBuild는 어셈블리에 사용할 버전을 확인할 수 없습니다.

다음 예제는 두 버전의 충돌을 보여 주는 진단 로그의 발췌문입니다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" [].

MSBuildDebugEngine 환경 변수를 1로 설정하여 가능한 모든 로그를 가져올 수도 있습니다. 자세한 내용은 .NET Framework - 로그에 대한 MSBuild 빌드를 참조하세요.

해결 방법

이 문제를 해결하는 방법은 프로젝트 구성 및 어셈블리 종속성 요구 사항에 따라 달라집니다.

  • NuGet 패키지 또는 SDK를 업그레이드하거나 다시 설치하여 디스크의 어셈블리 버전을 업데이트합니다.
  • Visual Studio용 패키지 관리자 콘솔의 명령을 사용하여 Update-Package -reinstall 모든 패키지를 최신 버전으로 업데이트합니다. 자세한 내용은 패키지 다시 설치 및 업데이트를 참조하세요.
  • 디스크에 참조된 어셈블리의 여러 버전이 있는 프로젝트의 경우 설치된 충돌하는 어셈블리의 최신 버전을 참조하도록 프로젝트 또는 종속성을 업데이트합니다. GAC(전역 어셈블리 캐시)는 특정 버전의 어셈블리를 참조하지만 GAC에서 재정의하는 경우 잠재적 충돌의 원인일 수도 있습니다. 자세한 내용은 전역 어셈블리 캐시를 참조하십시오.

외부 구성 요소

충돌이 Microsoft가 아닌 구성 요소에 있는 경우 프로젝트에서 사용 중인 충돌하는 어셈블리 버전에서 구성 요소가 지원되지 않을 수 있습니다. 다른 구성 요소의 공급자를 확인하여 호환되는 업데이트된 버전을 제공하는지 확인합니다. 수정을 사용할 수 없는 경우 해결 방법은 참조하는 충돌하는 어셈블리의 버전을 다른 구성 요소에서 사용하는 버전과 일치하도록 다운그레이드하는 것일 수 있습니다.

바인딩 리디렉션

경우에 따라 프로젝트에서 바인딩 리디렉션을 지정하거나 지정해야 할 수 있습니다. 이 경우 호출에서 지정된 버전의 어셈블리를 사용하도록 강제합니다. 추가 정보를 원하시면, 바인딩 리디렉션이 작동하는 방식에 대한 이해를 돕기 위해 어셈블리 버전 리디렉션을 참조하세요.

Visual Studio 또는 프로젝트 파일의 설정은 자동 바인딩 리디렉션을 사용하거나 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 자동 바인딩 리디렉션 사용 및 사용 안 함을 참조하세요. 설정을 확인하고 프로젝트에서 바인딩 리디렉션을 사용하는 방법과 이유를 이해해야 합니다.

여러 버전의 어셈블리가 로드됨.

고급 시나리오에서 프로젝트에는 의도적으로 동일한 어셈블리의 버전이 두 개 이상 필요할 수 있습니다. 특수 기술을 사용하여 일반 어셈블리 로드 프로세스를 재정의하여 목표를 달성할 수 있습니다. 자세한 내용은 어셈블리 로드 해결을 참조하세요. 어셈블리 로드 에 대한 모범 사례의 지침을 반드시 이해하고 따라야 합니다.

어셈블리 참조 문제를 해결하는 방법에 대한 가이드는 어셈블리 참조 문제 해결런타임에서 어셈블리를 찾는 방법을 참조하세요.

적용 대상

MSBuild의 모든 버전