다른 응용 프로그램에서 사용하는 DLL이 있습니다. 그것은 상당히 정기적으로 업데이트되는 타사 DLL을 사용합니다. 필요 이상 버전이 존재하는 한 나는 행복하다.DLL에 AppDomain.CurrentDomain.AssemblyResolve에 연결하는 방법
하지만 Visual Studio는 내 DLL을 사용하는 응용 프로그램에 필요한 정확한 버전을 적용합니다.
이벤트 처리기를 AppDomain.CurrentDomain.AssemblyResolve에 추가하여 이후 버전을 확인하고 사용할 수 있습니다. 그러나 나는 그것을 어디에 추가 할 지 모른다.
대부분의 응용 프로그램은 program.cs 시작시이를 넣습니다. 그러나 dll에는 그러한 것이 없습니다.
정적 생성자에 넣을 것이지만이 타사 DLL을 사용하는 많은 클래스가 있습니다. 이 이벤트를 각 클래스에 첨부하는 것은 지저분 해 보입니다.
다른 옵션이 있습니까? 당신은 당신이 "리디렉션"할 유형을 해결하기 전에
private Assembly AssemblyResolveHandler(object sender,ResolveEventArgs e)
{
try
{
string[] assemblyDetail = e.Name.Split(',');
string assemblyBasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Assembly assembly = Assembly.LoadFrom(assemblyBasePath + @"\" + assemblyDetail[0] + ".dll");
return assembly;
}
catch (Exception ex)
{
throw new ApplicationException("Failed resolving assembly", ex);
}
}
확실
AssemblyResolve
에 위임의 할당이 완료되어 있는지 확인 :
타사 DLL이 관리되거나 관리되지 않습니까? 질문에서 나는 관리한다고 생각합니다. –
.config 파일이이를 처리해야합니까? – leppie
또는 타임 스탬프가있는 프로파일 러를 사용하여 가장 먼저 발생하는 경향을 확인하십시오. 매우 흩어져있는 도서관의 경우 힘들 것입니다. – leppie