MVC 및 WebAPI가있는 DotNet 4.6.1 응용 프로그램이 있습니다. MVC 측에 GlobalConfiguration.Configuration이 있고 WebAPI에 Assembly1에 대한 종속성이 있습니다.DotNet 의존성 지옥에서 왜 내가 빠져 나갈 수 있습니까?
분명히 GlobalConfiguration.Configuration의 System.Web.Http는 "Newtonsoft.Json, Version = 6.0.0.0"에 종속되어 있으며 Assembly1에는 종속성이 있습니다. "Newtonsoft.Json", 버전 = 7.0.1. 내 WebApi에 대해 핑을 실행하려고하면 내가 얻을 :
나는이 정확한 의존성이 정확하게 때문에 그 인용을 배치 내 Web.config를 Microsoft에서 NuGet에 의해 추가 생성 된"Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies"
그래서 지금까지 나는 그것을 만지지 않았고, 나를 위해 지어졌다. 의 Web.config의 구조는 다음과 같습니다
<!--Personal Comment: See how configuration has no namespace-->
<configuration>
<runtime>
<!--Personal Comment: See how assemblyBinding DOES have namespace-->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<!--Left out all of the other dependentAssemblies for brevity-->
<dependentAssembly>
<!--Personal Comment: Take note the upper/lowercase of attributes-->
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral">
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0 newVersion="7.0.0.0" />
</assemblyIdentity>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
내가 VSCode에 .csproj로 이동하여 참조를 변경하면 이상한 것은, = "Newtonsoft.Json"를 포함하고 버전 = 7.0.0.0을 제거하는 것입니다, 등등 ... 그러면 아무 것도 고쳐지지 않습니다. 그러나 버전 = 7.0.0.0을 버전 6.0.0.0으로 변경하고 7.0.1으로 hintpath를 지정하면 솔루션이 작동합니다!
이것은 살기 좋고 프로그램하기에는 끔찍한 방법 인 것처럼 보이며, 내가 처리하지 않으면 좋아하지 않습니다. 온라인으로 읽은 모든 기사에 따르면, 모든 질문, 모든 대답, 그들은 모두 "bindingRedirect 사용"이라고 말하면서 사용하는 방식으로 사용합니다. 내 가정은 bindingRedirect가 내 코드에서 작동하지 않는다는 것입니다. 이유를 알아야하거나, Newtonsoft.Json을 내 참조에서 두 번 참조하고 컴파일러에게 타사 프로젝트가 아닌 경우 7.0.0.0 코드를 사용하도록 할 수 있습니까?
은 모든 것을 최신 버전으로 업그레이드하고 있습니까? – BOR4
아니요. 이 시나리오에서 사용하는 옵션은 MVC 부분 만 완전히 제거하는 것입니다. MVC는 부트 스트랩 코드로 작성되었으며 사용되지 않습니다. 그러나 내가 "그게 답"이라고 말할 수없는 이유는 dotnet 2.0 코드 기반을 유지하면서이 문제를 여러 번 보았 기 때문에이 문제를 한 번에 해결할 필요가 있다는 것입니다. 다시 일어날 때해야 할 일. – user3654055
소스 제어 형식을 사용하고 있습니까? – JuanR