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



9 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]
메시지 표시 되지

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

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




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

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




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)을 확인하십시오.




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




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

Error List 창을보십시오. 바인딩 충돌에 대해 대단히 긴 경고가 나타나는 것을 볼 수 있습니다. 이를 두 번 클릭하면 올바른 매핑으로 <runtime><assemblyBinding> 블록이 자동으로 다시 작성됩니다.




.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> -->




Diagnostic.but으로 MSBuild의 자세한 정보를 변경했는데 위의 답변에 따라 문제가있는 곳을 찾을 수 없습니다. app.config에이 코드가 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="XbimXplorer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

그래서 첫 번째 System, Version을 4.0.0.0에서 12.0.0.0으로 바꾸었고 프로젝트가 잘되었습니다.




난 그냥 로컬로 참조 된 DLL을 nuget에서 패키지를 전환 한 후이 문제를 만났다. 문제는 app.config 오래된 런타임 바인딩입니다.




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

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

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




Related