2010-12-21 2 views
2

필요에 따라 해당 구성 요소를 다운로드하는 .NET 클라이언트 소프트웨어 패키지를 작성하려고합니다.DLL 로딩 받기

내가 메인 실행 파일과 20 개의 다른 dll 파일로 분할 된 프로그램이 있다고 가정 해 봅시다. 메인 프로그램은 그 중 3 개를 참조하고, 어쨌든 다른 것들을 참조합니다 ... 그들은 의존성 구조와 같은 어떤 종류의 나무를 가지고 있습니다.

내가 달성하고자하는 일은 기본 실행 파일 만 배포하고 요청시 서버 위치에서 모든 것을 가져 오는 것입니다.

이와 비슷한 내용 : 주 프로그램과 이러한 모든 dll 프로젝트는 단일 솔루션에 있으며 다른 솔루션과 마찬가지로 구성됩니다. 배포하는 동안 exe 만 배포되고 다른 dll (사용 된 일부 타사 라이브러리 포함)은 다운로드 할 수있는 서버 위치에 저장됩니다.

exe가 실행되면 사용자가 메뉴 항목을 클릭 할 때 dll 파일의 다른 UI 창이 표시되어 OS가 dll을 찾고 (즉, 거기에 없음), 사용자가 개입하여 다운로드합니다 서버에서 필요한 dll을 exe 옆에 놓고 OS가 처음부터 거기에있는 것처럼로드합니다.

일반적인 인터페이스 클래스와 반사 마법을 사용하여이 기능을 구현할 수 있지만, 제 3 자에 대한 주문형 다운로드가 포함 된 단일 솔루션에서 dll을 모두 빌드하는 것을 포함하여 더 많은 것을 기대했습니다. 라이브러리.

아이디어가 있습니까?

+2

많은 문제가 있습니다. 이로 인해 발생할 수있는 보안 및 버전 문제는 해결하기가 어렵습니다. –

+0

저는이 사실을 잘 알고 있습니다 만, 제가 취해야 할 위험이 있습니다. 위에서 설명한 문제는 내가 붙어있는 부분 일뿐입니다. 그것은 훨씬 더 큰 그림의 일부입니다. –

답변

1

사용자 지정 위치에서 어셈블리를로드 할 수있는 AppDomain.AssemblyResolve event을 찾고 있습니다.
다른 의견이 필요하지 않습니다.

+0

이것은 실제로 유망 해 보입니다. 나는 이것이 내가 찾던 리드라고 생각한다. –

1

현재 appdomain에 대한 AppDomain.ResolveAssembly 및 AppDomain.ResolveType 이벤트에 대한 이벤트 처리기를 제공하고 어셈블리를로드합니다.

그러나 올바른 컨텍스트에 어셈블리를로드 할주의는 : http://msdn.microsoft.com/en-us/library/dd153782.aspx

1

당신은 화재 어셈블리를 찾을 수 없을 때의 AssemblyResolve 이벤트를 CATH하고 그것을 찾으려고 어셈블리를 다운로드 할 수 있습니다.

You should read this article.