[.net] 해결할 수없는 동일한 종속 어셈블리의 서로 다른 버전간에 충돌 발견



Answers

msbuild Foo.sln /t:Rebuild /v:diag 실행하십시오. msbuild Foo.sln /t:Rebuild /v:diag 명령 줄에서 솔루션을 빌드하고 좀 더 자세한 정보를 얻으려면 C:\Program Files (x86)\MSBuild\12.0\bin msbuild Foo.sln /t:Rebuild /v:diag 를 실행 한 다음 .csproj. 를 찾으십시오 .csproj. 경고를 기록하고 버전이 다른 동일한 공통 어셈블리를 사용하는 다른 프로젝트의 참조 및 참조를 확인합니다.

편집 : VS2013에서 직접 빌드 상세도를 설정할 수도 있습니다. Tools > Options 메뉴로 이동 한 다음 Projects and Solutions 이동하여 MSBuild 상세 표시를 Diagnostic 설정합니다.

편집 : 몇 가지 설명을 내가 방금 하나있어. 제 경우에는 경고가 Resharper 프롬프트를 사용하여 참조 추가 대화 상자에 추가되었습니다.이 대화 상자는 v4 및 v12 모두 선택할 수 있지만 버전이없는 경우 참조 대화 상자에 표시됩니다.

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework" />

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, ..." />

/v:diag 자세한 표시가있는 MSBuild 로그에서 다음과 같이 보입니다. 2 개의 참조가 서로 충돌하는 세부 사항 제공 :

  There was a conflict between 
  "Microsoft.Build.Framework, Version=4.0.0.0, ..." and 
  "Microsoft.Build.Framework, Version=12.0.0.0, ...". (TaskId:16)

      "Microsoft.Build.Framework, Version=4.0.0.0, ..." was chosen because it was primary and 
      "Microsoft.Build.Framework, Version=12.0.0.0, ..." was not. (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=4.0.0.0, ..." 
      [C:\...\v4.5.1\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v4.5.1\Microsoft.Build.Framework.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v4.5.1\Microsoft.Build.Framework.dll". (TaskId:16)
              Microsoft.Build.Framework (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=12.0.0.0, ..." 
      [C:\...\v12.0\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v12.0\Microsoft.Build.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

          C:\...\v12.0\Microsoft.Build.Engine.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.Engine.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277: 
Found conflicts between different versions of the same dependent assembly that could not be resolved.  
These reference conflicts are listed in the build log when log verbosity is set to detailed. 
[C:\Users\Ilya.Kozhevnikov\Dropbox\BuildTree\BuildTree\BuildTree.csproj]
Question

여러 개의 프로젝트가있는 솔루션을 정리하고 빌드하면 출력 창이 빌드가 성공했다고보고합니다. 그러나 오류 목록 창 을 보면 다음과 같은 경고가 표시됩니다.

해결할 수없는 동일한 종속 어셈블리의 서로 다른 버전간에 충돌이 발견되었습니다. 로그 참조를 상세로 설정하면 이러한 참조 충돌이 빌드 로그에 나열됩니다. C : \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets

이 메시지를 두 번 누르면 C : \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets 파일이 열리지 만 아무 것도 이해하지 못합니다.

웹용 Visual Studio Express 2013을 사용하고 있습니다.

무엇이 잘못되었는지 DLL을 찾은 다음 어떻게하면 경고가 사라지게 할 수 있습니까?




.NET 코어에 필요한 구성 요소 또는 이미 설치된 프레임 워크와 충돌하는 기타 항목이 설치되는 경우가 종종 있습니다. 내 솔루션 거기에 프로젝트 (.csproj) 파일을 열고 이러한 참조를 제거했습니다. 예를 들어 System.IO, System.Threading 등은 최근에 설치된 일부 NuGet 패키지를 통해 Microsoft.Bcl이 포함될 때 추가되는 경향이 있습니다. 내 프로젝트의 특정 버전에 대한 이유가 없으므로 참조 및 프로젝트 빌드를 제거합니다. 희망이 도움이됩니다.

프로젝트 파일에서 "참조"를 검색하고 충돌을 제거 할 수 있습니다. 그것들이 System에 포함되어 있다면, 그것들을 없애고, 빌드가 작동해야합니다. 이 문제의 모든 사례에 대해 답변을하지 못할 수도 있습니다.

내가 코멘트 한 것의 예 :

<!-- <Reference Include="System.Runtime, Version=2.6.9.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> -->
  <!-- <HintPath>$(SolutionDir)packages\Microsoft.Bcl.1.1.9\lib\net40\System.Runtime.dll</HintPath> -->
  <!-- <Private>True</Private> -->
<!-- </Reference> -->




너겟 패키지가있는 웹 프로젝트에서 Newtonsoft Json을 설치하면이 문제를 해결할 수 있습니다.




NuGet Packagaes 관리에서 Microsoft ASP.NET MVC nuget.org를 제거하고 다시 설치했습니다. 다시 설치하는 동안 면도기 버전과 관련된 모든 충돌이 해결되었습니다. 시도 해봐 .




Visual Studio에서 빌드 상세 표시를 변경하면 올바른 방향을 가리킬 수 있습니다. VS에서 자세한 정보를 변경하려면 다음 단계를 따르십시오.

1. Go to Tools->Options menu in VS
2. Open Projects and Solutions->Build and Run 
3. Change the value of the MSBuild project build output verbosity. 
   Pick one from Quiet, Minimal, Normal, Detailed and Diagnostic

빌드의 변경 사항을 보려면 VS의 출력 창 (cntl + alt + o)을 확인하십시오.




어떻게하면 경고가 사라지나요?

이 문제를 해결하기 위해 NuGet 패키지를 reinstall 하거나 업그레이드해야 할 것입니다.




다른 답변에 따라 출력 로깅 수준을 세부 정보로 설정하고 충돌을 검색하여 다음에 어디를보아야하는지 알려줍니다.

필자의 경우, 그것은 참조의 출처를 찾는 몇 방향으로 나를 보냈지 만, 결국 문제는 내 이식 가능한 클래스 라이브러리 프로젝트 중 하나 였고, 잘못된 버전을 목표로하고 있었고 자체적으로 버전의 참조, 따라서 충돌합니다. 빠른 재 표적과 문제가 해결되었습니다.




패키지 관리자 콘솔을 통해 Update-Package 명령을 실행하십시오.

이렇게하면 MSB3277이 수정되어 모든 패키지와 모든 관련 어셈블리가 가능한 가장 높은 버전으로 다시 설치됩니다. 또한 특정 패키지 만 업데이트 할 수도 있습니다. 또는 원하는 경우 업데이트 후 다운 그레이드,이 고정 문제는 몇 번 나왔다. 보유하고있는 너겟 패키지의 수에 따라이 과정에 몇 분이 걸릴 수 있습니다.

공식 문서에 대한 추가 정보 https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages




Links