VS 2013 (업데이트 1)에서 새 ASP.NET MVC 5 웹 프로젝트를 만든 다음 모든 NuGet 패키지를 업데이트했습니다. 프로젝트를 빌드 할 때 다음 경고가 표시됩니다.
경고 MSB3243 : “Newtonsoft.Json, 버전 = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”와 “Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”간의 충돌을 해결할 방법이 없습니다.
그러나 web.config를 확인하면 바인딩 리디렉션이 제자리에 있음을 알 수 있습니다.
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
이것이 바로 경고가 권고하는 것입니다.
이 경고를 어떻게 수정할 수 있습니까?
답변
경고를 수정하는 데 사용한 단계는 다음과 같습니다.
- VS에서 프로젝트 언로드
- .csproj 파일 편집
- Newtonsoft.Json 어셈블리에 대한 모든 참조 검색
- 2 개, 1 개에서 v6 및 1 개에서 v5를 찾았습니다.
- v5에 대한 참조를 v6으로 대체
- 프로젝트 다시로드
- 빌드 및 어셈블리 참조 실패 알림
- 참조를보고 이제 Newtonsoft.Json에 두 개가 있는지 확인합니다. 해결되지 않는 항목을 제거하십시오.
- 재 구축-경고 없음
답변
이 문제는 Newtonsoft.Json 4.5.6에 대한 참조가있는 Microsoft.AspNet.WebApi가 포함 된 패키지를 업데이트하고 이미 버전 6이 설치되어 있기 때문에 발생했습니다. 버전 6을 사용하는 것은 영리하지 못했습니다.
이를 해결하기 위해 WebApi 업데이트 후 도구> NuGet 패키지 관리자> Pacakge 관리자 콘솔을 열고 다음을 실행했습니다.
Update-Package Newtonsoft.Json
로그에 따르면 6.0.x 및 4.5.6 버전이 모두 최신 버전으로 업데이트되었으며 모든 것이 정상이었습니다.
나는 이것이 다시 올 것 같은 느낌이 든다.
답변
프로젝트 파일에서이 섹션을 삭제하면 문제가 해결됩니다.
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
답변
위의 어느 것도 작동하지 않으면 web.config 또는 app.config에서 이것을 사용해보십시오.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
답변
Newtonsoft.Json 11.0.1에서 12.0.2로 업그레이드했습니다. Notepad ++에서 프로젝트 파일을 열면 둘 다 발견했습니다.
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
과
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
버전 11.0.1에 대한 힌트 경로로 참조를 래핑하는 ItemGroup을 삭제했습니다.
이러한 문제는 찾기가 엄청나게 답답할 수 있습니다. 또한 개발자는 종종 이전 프로젝트 설정과 동일한 단계를 따릅니다. 이전 설정에서는 문제가 발생하지 않았습니다. 어떤 이유로 든 프로젝트 파일이 때때로 잘못 업데이트됩니다.
Microsoft가 이러한 Visual Studio DLL 지옥 문제를 해결하기를 간절히 바랍니다. 그것은 너무 자주 발생하고 종종 시행 착오를 통해 고쳐질 때까지 진행이 멈춰 섰습니다.
답변
답변
바인딩 리디렉션으로
oldVersion = “0.0.0.0-6.0.0.0”
이전 버전의 dll은 버전 0.0.0.0과 버전 6.0.0.0 사이에 있습니다.