[asp.net] 파일 또는 어셈블리 ‘Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed’를로드 할 수 없습니다

오류가 발생합니다

System.IO.FileLoadException : 파일 또는 어셈블리 ‘Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed’또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

CI 구축을 위해

내가 시도한 솔루션

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

그것은 또한 작동하지 않았다



답변

패키지 관리자 콘솔에서 다음을 실행하십시오 Update-Package –reinstall Newtonsoft.Json.

최신 정보

나는 원래 이것을 주석으로 게시했지만 @OwenBlacker가 제안한대로 여기에 넣을 것입니다.

이 작업을 수행 한 후에도 여전히 오류가 발생하면 결국 파일 <dependentAssembly>에서 Json.Net 섹션을 삭제했습니다 .config. 없는 경우 다시 설치하면 다시 삭제해야합니다. 패키지 자체에 정상적인 해결책이있을 때 까지이 수동 단계가 필수입니다.

참고 :이 작업을 수행하기 전에 아래 설명을 읽으십시오.

르네의 의견에 따라 아래의 주의 대답에 게시 명령이 솔루션의 모든 프로젝트에서 패키지를 다시 설치됩니다. 따라서 여러 프로젝트에서 Newtonsoft.Json 패키지를 사용하고 다른 버전을 사용하는 경우 위 명령을 실행하면 원하지 않는 결과가 발생할 수 있습니다.


답변

Newtonsoft.Json v4.5 버전에 문제가있는 모든 사람에게 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>

중요 : configuration구성 파일 의 태그에 네임 스페이스 속성이 없는지 확인하십시오 ( https://stackoverflow.com/a/12011221/150370에서 제 안됨). 그렇지 않으면 assemblyBinding태그가 무시됩니다.


답변

요점은 구성 파일에서 올바른 버전을 참조하는 것입니다.

단계;

1- 프로젝트 참조 속성에서 Newtonsoft.Json.dll의 버전이 패키지 폴더의 버전인지 확인하십시오 (예 : 광산은 7.0.1이고 참조 버전은 7.0.0.0입니다)

2- 예외에서 프로젝트가 당신에게 기대하는 것을보십시오 (광산은 6.0.0.0입니다)

3- 설정 파일에 종속 어셈블리를 원하는대로 추가하십시오.

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"  publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>


답변

여기에 제시된 솔루션 (운용 제거, 재설치, 참조 삭제, bindingRedirects 작성 등)에 대해 운이 없었습니다. 나는 이전 버전의 Newtonsoft로 돌아 가야했습니다. 버전 5.0.6은 이전에 작동 했으므로 그 중 하나를 시도했습니다. 패키지 콘솔에 다음 두 명령을 입력해야했습니다.

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

-force제거를 강제 실행하려면 첫 번째 명령 의 옵션이 필요합니다. 다른 어셈블리와의 종속성으로 인해 제거하지 않아도됩니다.


답변

이 바인딩 리디렉션을 .config 파일에 추가하는 문제를 해결했습니다.

<runtime>
    . . .
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
            <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

버전 4.5.0.0을 찾을 수 없다는 오류 메시지가 표시됩니다. 현재 Newtonsoft.Json 버전은 6.0.0.0이므로 리디렉션은 4.5가 아닌 6.0에서 6.0으로 이동해야합니다.


답변

나는 당신이 잘못된 목표를 가리키고 있다고 생각합니다. 6.0 대신 4.5로 변경하십시오.

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

이 작동합니다.


답변

이 좌절스러운 문제를 해결하기 위해 며칠을 보냈습니다. 나는 웹에서 찾을 수있는 거의 모든 것을 시도했다. 마지막 으로이 오류는 하나의 솔루션에서 다른 대상 .Net 프로젝트 버전 (4.5 및 4.5.1)에 의해 (내 경우와 같이) 발생할 수 있음을 발견했습니다. 다음 단계는 나를 위해 수정했습니다.

  1. 솔루션에있는 모든 프로젝트의 .Net 버전을 다시 확인하십시오. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고로 이동하십시오 Properties.

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

  1. 가능하면 모든 프로젝트에 대해 동일한 .Net 버전을 설정하십시오 . 적어도 시작 프로젝트를 변경하려고 시도하지 않으면 (이것이 문제의 원인이었습니다).

  2. Newtonsoft.Json솔루션에서 모든 팩을 제거하십시오 .

    uninstall-package newtonsoft.json -force

  3. Newtonsoft.Json모든 packages.config파일의 모든 버전을 다음 과 같이 업데이트하십시오.

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. 다음을 사용 Newtonsoft.Json하여 “Package Manager Console”에서 다시 설치하십시오 .

    install-package newtonsoft.json

  5. 솔루션 재 구축

(선택 사항) 7. 시작 프로젝트를 변경 한 경우 다시 시작하십시오.