source

.다른 공용 키 토큰을 사용하는 Net 어셈블리 바인딩 리디렉션

factcode 2023. 6. 23. 22:28
반응형

.다른 공용 키 토큰을 사용하는 Net 어셈블리 바인딩 리디렉션

공개 키 토큰이 이전 버전에서 null이고 최신 버전에서 설정된 경우 참조된 어셈블리의 다른 버전 간에 어셈블리 바인딩 리디렉션을 수행할 수 있습니까?

예를 들어, 저는 두 개의 어셈블리가 있습니다.

System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

그리고.

System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

다음 어셈블리 바인딩 리디렉션이 As에서 작동하는지 여부.Net web.config...

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

아니요, 불가능합니다.어셈블리에 동일한 공용 키가 있어야 합니다.상품권.

bindingRedirect 태그에는 이전 버전 및 새 버전 속성만 있으므로 "null" 버전에 대해 알려줄 방법이 없습니다.

하지만 뒤에 있는 진짜 이유는 강력한 이름 메커니즘 때문에 설명됩니다.

AppDomain을 사용할 수 있습니다.AssemblyResolve 이벤트를 수행합니다.는 이 답변에 샘플 코드를 포함했습니다.

바인딩 리다이렉트를 사용할 수 없는 것처럼 보이지만, 저의 경우 다른 공개 키로 문제를 해결할 수 있었습니다.참조 DLL에서 요청 중인 토큰 값을 수정하여 토큰을 만듭니다.

DLL을 IL로 분해하고 참조를 변경한 후 재조립합니다(키 파일이 없는 경우 문제가 될 수 있음).

(어셈블리를 참조할 때 제 의견을 참조하십시오. 버전 번호를 고집하면서 공개 토큰을 무시할 수 있습니까? (즉, 서명/미서명 허용)

언급URL : https://stackoverflow.com/questions/2191296/net-assembly-binding-redirect-with-differing-public-key-tokens

반응형