2010-03-26 3 views
0

ASP.Net 응용 프로그램, 두 개의 다른 Win32 서비스 및 기타 sysadmin 관련 응용 프로그램으로 구성된 응용 프로그램의 빌드 프로세스를 유지 관리하고 있습니다..NET 어셈블리 로딩 문제

디버깅 &을 배포 할 때 둘 다 사용하려면 다음 구성으로 끝내기를 원합니다.

libraires/ -- Contains shared assemblies used by all other apps. 
web/   -- ASP.Net site 
service1/  -- Win32 service 1 (seen under the service control manager) 
service2/  -- Win32 service 2 
adminstuff/ -- Sysadmin/support stuff used for troubleshooting 

문제는 응용 프로그램 루트 외부의 상대 디렉토리를 지원하지 않는 app.config의 어셈블리 탐색 privatePath입니다. 즉 : ../ 라이브러리를 사용할 수 없습니다. 매우 실망 스럽네요 ...

강력한 어셈블리 이름을 사용할 경우 절대 경로를 지원하는 것으로 보이는 codeBase 구성 요소를 사용할 수 있지만 각 어셈블리를 개별적으로 지정해야합니다.

또한 AppDomain.AssemblyResolve 이벤트에 후킹을 시도했지만 Main()에서 이벤트 처리기를 등록하기 전에 .Net Fusion에서 FileNotFoundException을 얻고 있습니다.

GAC에 어셈블리를 등록하는 아이디어가 마음에 들지 않습니다. 응용 프로그램을 배포/업그레이드 할 때 너무 많은 번거 로움.

각 requiered 어셈블리의 경로를 지정하지 않고도이 작업을 수행 할 다른 작업이 있습니까?

답변

0

나는 과거에 AppDomain.AssemblyResolve 접근법을 사용했으며 매우 잘 작동했습니다. 어셈블리가 FileNotFound 예외를 일으키는 원인을 파악하려고 시도하는 것이 좋습니다. 응용 프로그램 초기화를 재구성 할 수 있으면로드 할 때로드되지 않도록합니다.

2

귀하의 접근 방식은 최악의 종류의 DLL 지옥을 호출합니다. "라이브러리"어셈블리를 업데이트하면 테스트되지 않은 모든 응용 프로그램이 이전 버전의 어셈블리를 사용하도록하여 복구 할 수 없습니다. CLR이이 시나리오를 지원하지 않는 이유입니다.

모든 일반적인 해결 방법을 나열했습니다. 하나 제외 : 각 앱에 자체 사본을 제공하십시오.