어셈블리 바인딩 리디렉션 : 방법 및 이유 작동에 대한 일반적인 이해 질문입니다. 쿼리 바인딩 리디렉션이 부,

이것은 문제가되는 질문이 아니라 어셈블리 바인딩 리디렉션의 작동에 대한 일반적인 이해 질문입니다.

쿼리

  1. 바인딩 리디렉션이 부, 빌드 및 개정 번호가 아닌 주 버전 만 표시하는 이유는 무엇입니까?
  2. 메이저 버전이 변경된 경우에만 이전 버전과 새 버전이 변경 되나요?

    <dependentAssembly>
        <assemblyIdentity name="FooBar"
                          publicKeyToken="32ab4ba45e0a69a1"
                          culture="en-us" />
    
        <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
    </dependentAssembly>


답변

바인딩 리디렉션이 필요한 이유는 무엇입니까? 라이브러리 B를 참조하는 애플리케이션 A와 버전 1.1.2.5의 라이브러리 C가 있다고 가정합니다. 라이브러리 B는 라이브러리 C도 참조하지만 버전 1.1.1.0입니다. 런타임에 동일한 어셈블리의 다른 버전을로드 할 수 없기 때문에 이제 충돌이 발생합니다. 이 충돌을 해결하려면 일반적으로 새 버전으로 바인딩 리디렉션을 사용할 수 있습니다 (그러나 이전 버전도 가능). configuration > runtime > assemblyBinding섹션 아래에있는 애플리케이션 A의 app.config 파일에 다음을 추가하면됩니다 ( 전체 구성 파일의 예는 여기 참조 ).

<dependentAssembly>
    <assemblyIdentity name="C"
                      publicKeyToken="32ab4ba45e0a69a1"
                      culture="en-us" />

    <bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />
</dependentAssembly>

매핑 할 다양한 버전을 지정할 수도 있습니다.

<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />  

이제 버전 1.1.1.0의 C를 참조하여 컴파일 된 라이브러리 B는 런타임에 버전 1.1.2.5의 C를 사용합니다. 물론 라이브러리 C가 이전 버전과 호환되는지 확인하는 것이 좋습니다. 그렇지 않으면 예기치 않은 결과가 발생할 수 있습니다.

주요 라이브러리뿐만 아니라 모든 버전의 라이브러리를 리디렉션 할 수 있습니다.


답변

NewtonSoft.Json에 대한 바인딩 리디렉션 문제를 발견했습니다. 우리는 win 10 파일 속성 “9.0.1.19813”에서 파일 버전을 찾고 번호를 찾고 리디렉션이 계속 실패했습니다. 추가 조사 결과 어셈블리 버전이 아닌 파일 버전을보고 있음을 발견했습니다. 그래서 사람들이 파일 버전 (자주 변경됨)과 어셈블리 버전 (Windows 10 파일 탐색기에서 볼 수 없음)을 잘못 착각하고 있는지 궁금합니다. dll의 어셈블리 버전을 보려면 powershell에서 실행할 수 있습니다. dll 이름을 버전을 찾으려는 이름으로 바꿉니다.

[Reflection.AssemblyName]::GetAssemblyName('C:\development\bin\Newtonsoft.Json.dll').Version

위의 결과입니다.

Major  Minor  Build  Revision

-----  -----  -----  --------

9      0      0      0

참조 참조 :

Windows Vista 이상 (WIndows 7, 2008)에서 .NET 어셈블리의 어셈블리 버전을 어떻게 볼 수 있습니까?

https://support.microsoft.com/en-nz/help/556041

여기에 이미지 설명 입력


답변