본문 바로가기
Programing/C#

동적 DLL Load

by june._.note 2016. 12. 19.

Dll을 한 번 Load하고 나면, Unload를 할 수 없기 때문에 Load 했던 프로그램을 종료하고 다시 실행해야 하는 불편함이 있음.

 

재실행하는데 걸리는 시간이 짧은 경우에는 종료 후 재시작을 하면 되겠지만,

 

프로그램을 열고 닫는데 시간이 많이 걸리는 프로그램의 경우 여간 불편한게 아니다.

 

특히 프로그램을 개발하여 Test를 하기위해서는 수시로 dll을 load하고 수정하고 해야하는데,

 

재시작에 시간이 오래걸리는 프로그램의 경우 너무 불편함.

 

따라서 dll을 동적으로 Load 해주는 프로그램을 작성해서 프로그램을 개발하면 편리해질 거라고 생각하여 검색함.

 

 

 

-- 동적 DLL Load 관련 내용--

 

사이트(참조 사이트 : http://blog.danggun.net/2147)를 참조하여 delegate를 이용하여 DLL을 Load함.

 

Load한 DLL을 이용하여 해당 Class를 불러오고, Method도 불러오는 프로그램을 작성하였지만, Load한 dll을 Unload를 하는 방법이 없음.

 

프로그램을 수정하여 Rebuild하고, 다시 Reload하려했는데 이미 dll을 물고있어 빌드하고 dll생성을 하지 못함. 

 

 

 

그래서 다시 검색을 통해 Unload를 하는 방법까지 찾아봄.

 

 

-- AppDomain을 이용해서 dll을 불러온뒤, Domain자체를 unLoad하여 dll load를 해제하는 방법이 있다고 함.

 

따라서 해당 방법을 참조하여 프로그램을 수정하였으나

 

App Domain을 이용하여 Load하는데 예외가 발생함. 그런데 이 예외가 나만 나는게 아닌듯.

 

검색해보니 아래 참조 사이트에 해당 문제에 대한 해결방법이 명시되어있음.

 

참조 사이트 :

http://stackoverflow.com/questions/658498/how-to-load-an-assembly-to-appdomain-with-all-references-recursively

http://egloos.zum.com/littles/v/3471191

 

 

 

+ 2016.12.20 추가

: 내가 사용하고 있는 프로그램의 문제인지, 내가 잘못해서인지는 모르겠지만, load하는 dll에 static을 선언하여 사용하려고하면 StacOverflow 에러와 함께 프로그램이 죽음. 물론, 내가 잘못했기 떄문이겠지만.

--> Static 따위의 문제가 아니었음.(http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=602&rssMode=1&wtype=0)

내용에서와 같이 내 코드에서도 객체를 무한으로 생성하게 되는 현상이 발생하여, stackoverflow가 발생한 듯 싶음...