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

여러 프로젝트가있는 솔루션을 정리 한 다음 빌드하면 출력 창에 빌드 성공을보고합니다. 그러나 오류 목록 창을 볼 때 다음 경고가 표시됩니다.

해결할 수없는 동일한 종속 어셈블리의 다른 버전간에 충돌이 발견되었습니다. 이러한 상세 충돌은 로그 상세가 상세로 설정된 경우 빌드 로그에 나열됩니다. 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에 문제가 있는지 어떻게 알 수 있습니까? 그러면 어떻게 경고가 사라 집니까?



답변

eta : SO 자체의 @Nick Craver 가 작성해야 할 킬러 기사 가 있습니다.


다른 답변이 이것을 말하지만, 그들은 그것을 명시 적으로 만들지 않으므로, 나는 ….

VS2013.2에서 인용 된 정보의 방출을 실제로 트리거하려면 메시지를 읽을 필요가 없습니다.

C : \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1697,5) : 경고 MSB3277 : 확인할 수없는 동일한 종속 어셈블리의 서로 다른 버전간에 충돌이 발견되었습니다. 이러한 상세 충돌은 로그 세부 정보 detail 으로 설정된 경우 빌드 로그에 나열됩니다 .

이것은 올바르지 않습니다 (적어도 일부 버전의 Visual Studio에서는 그렇습니다-최신 VS2015 업데이트 3 이상에서는 정상인 것 같습니다). 대신에 돌려 진단 (에서 도구 -> 옵션 -> 프로젝트 및 솔루션 -> 빌드 및 실행 , 설정 의 MSBuild 프로젝트 빌드 출력 자세한 표시 하면 다음과 같은 메시지를 볼 수 있습니다 그러자,) :

“Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”와 “Newtonsoft.Json, Version = 6.0.5.17707, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”사이에 충돌이있었습니다.

  • “Newtonsoft.Json, 버전 = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”는 기본이므로 “Newtonsoft.Json, Version = 6.0.5.17707, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”가 선택되지 않았기 때문에 선택되었습니다.

그때

  • Ctrl-Alt-O 빌드 출력 창으로 이동
  • 드릴 다운을 찾으려면 ” 선택됨 “을 검색 하십시오.

… 예, [진단] 메시지의 세부 사항을보고있는 사람들에게는 모든 무시할 내용이 6.x내부적으로 Assembly Version이라는 6.0.0.0즉, SemVer Major 구성 요소 만 Assembly에 들어가는 관례있다는 무시의 소지가 있었습니다. 버전 🙂


답변

msbuild Foo.sln /t:Rebuild /v:diag(에서 C:\Program Files (x86)\MSBuild\12.0\bin)을 실행 하여 명령 행에서 솔루션을 빌드하고 약간 더 자세한 정보를 얻은 다음 .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" />

vs

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

/v:diag자세한 정보 가 포함 된 MSBuild 로그 에서는 다음과 같습니다. 두 참조가 충돌 한 세부 정보를 제공합니다.

  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]


답변

표시된 두 메시지를 비교하여 추가 Ruben의 답변 만 지원할 수 있습니다.

여기에 이미지 설명을 입력하십시오

그리고 메시지 :

C : \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1697,5) : 경고 MSB3277 : 확인할 수없는 동일한 종속 어셈블리의 서로 다른 버전간에 충돌이 발견되었습니다. 이러한 상세 충돌은 로그 세부 정보가 detail으로 설정된 경우 빌드 로그에 나열됩니다 .

루벤의 말이 맞습니다. 이것은 사실이 아닙니다. 충돌이 없으며 조립품이 누락되었습니다. 뷰가 필요할 때 즉, 처음 표시되기 직전 컴파일되기 때문에 프로젝트가 ASP.NET 응용 프로그램 인 경우 특히 지루합니다 . 이때 조립품을 준비해야합니다. (코드의 나머지 부분과 함께 뷰를 미리 컴파일하는 옵션이 있지만 이것은 또 다른 이야기 입니다.) 반면에 상세를 진단으로 설정 하면 다음과 같은 결과가 나타납니다.

C : \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1697,5) : 경고 MSB3245 :이 참조를 확인할 수 없습니다. 어셈블리 “System.Web.Razor, 버전 = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL”을 찾을 수 없습니다. 디스크에 어셈블리가 있는지 확인하십시오. 코드에이 참조가 필요한 경우 컴파일 오류가 발생할 수 있습니다.

결과적으로 필요한 것은 다음 중 하나입니다.

  1. 어셈블리에 대한 참조를 수동으로 추가 (디스크, GAC에 위치시키고 “직접”참조로 추가)
  2. 갤러리에 게시 된 경우 NuGet 패키지를 사용하여 패키지를 다운로드하고 패키지에 포함 된 어셈블리를 참조하십시오.

NuGet 갤러리에 대한 자세한 내용은 여기를 참조하십시오 . ASP.NET 뷰 사전 컴파일에 대한 자세한 내용은 여기를 참조하십시오 .


답변

Visual Studio에서 빌드 세부 정보를 변경하면 올바른 방향을 가리키는 데 도움이됩니다. VS에서 세부 정보를 변경하려면 아래 단계를 따르십시오.

  1. VS의 도구-> 옵션 메뉴로 이동하십시오.
  2. 프로젝트 및 솔루션 열기-> 빌드 및 실행
  3. MSBuild 프로젝트 빌드 출력 상세 값을 변경하십시오. 에서 하나를 선택 Quiet, Minimal, Normal, DetailedDiagnostic

VS에서 출력 창 ( Ctrl+ Alt+ O)을 확인하여 빌드 로그의 변경 사항을 확인하십시오.


답변

그런 다음 어떻게 경고를 없애나요?

당신은 아마해야 할거야 다시 설치 하거나이 문제를 해결하기 위해 NuGet 패키지를 업그레이드합니다.


답변

@elshev의 의견 중 하나 반복하기 솔루션-> 솔루션의 NuGet 패키지 관리-> 통합 아래에서 동일한 패키지의 다른 버전이 설치되어 있는지 확인할 수 있습니다. 패키지를 업데이트하십시오. 충돌 오류가 해결되었습니다.


답변

Visual Studio 2017을 사용하고 있으며 Nuget 패키지를 업데이트 할 때이 문제가 발생했습니다. 나를 위해 일한 것은 web.config파일 을 열고 <runtime><assemblyBinding>노드를 찾아 삭제하는 것이 었습니다. web.config프로젝트를 저장 하고 다시 빌드하십시오.

Error List창문 좀 봐 구속력있는 충돌에 대한 매우 긴 경고의 모양을 확인할 수 있습니다. 두 번 클릭 <runtime><assemblyBinding>하면 올바른 매핑으로 블록 이 자동으로 다시 생성됩니다 .