제가 얼마 전에 작성한 WinForm .NET 프로그램입니다. 많은 라이브러리 파일을 참조하기 때문에 이러한 라이브러리 파일은 최근 일부 버그와 알고리즘이 수정되었습니다. 그러나 메인 프로그램 파일은 많이 변경되지 않았습니다. 따라서 메인 프로그램을 다시 컴파일하는 것과는 다릅니다. 따라서 주 프로그램이 새 버전의 라이브러리 파일을 직접 호출할 수 있기를 바라면서 DLL 파일의 모든 새 버전이 실행 디렉터리에 복사되었습니다. 이 라이브러리 파일은 Strong Name으로 서명된 것으로 나타났습니다. 메인 프로그램을 호출하자마자 해당 버전의 파일을 찾을 수 없다는 오류가 발생합니다.
나중에 MSDN을 확인한 결과 구성에 런타임 노드를 추가하는 것만으로도 충분하다는 것을 알았습니다.
<런타임>
<assembliesBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<종속 어셈블리>
<어셈블리ID 이름="MyAssembly"
publicKeyToken="2b7c3a3291de04"
문화="중립" />
<boundRedirect oldVersion="3.0.0.8"
newVersion="4.1.0.0"/>
</dependentAssembly>
</어셈블리바인딩>
</runtime>
그러나 이에 대한 전제 조건은 두 DLL의 PublicKeyToken이 동일해야 한다는 것입니다. 즉, 동일한 sn 파일로 서명되어야 합니다.
물론 라이브러리 파일이 Strong Name으로 전혀 서명되지 않은 경우 버전 문제를 고려할 필요가 없습니다.