C#으로 여러 프로세스를 생성할 때, 각각의 프로젝트에서 사용하는 dll을 공동으로 사용하게 된다. 이때 dll은 실행 파일과 같은 폴더내에 존재해야 실행할 수 있다.
같은 dll을 사용하고 관리하는 관점에서 복사하는 일은 효율성이 떨어지며 항상 버전에 신경을 써야 하는 불편함이 있다.
이와 같은 비효율성을 제거하고자 실행파일과 다른 폴더에 있는 dll에 접근하는 방법으로 다음과 같은 방법을 사용하고자 한다.
코드를 수정하지 않고 지정할 수 있는 방법이 가장 편리하고 단순하겠지만 이와 같은 방법은 서브 폴더를 이용하는 방법밖에는 없다.
dll이 필요할 때 발생되는 이벤트 핸들러를 추가하고 이를 등록하여 지정된 폴더를 사용할 수 있도록 코드를 추가하여 해결한다.
참고 사이트: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=169705&ref=169702
* dll 필요할 때 발생되는 이벤트 핸들러 추가
static
System.Reflection.Assembly RsveAssem(
object
sender, ResolveEventArgs args)
{
System.Reflection.Assembly thisAss = System.Reflection.Assembly.GetExecutingAssembly();
var name = args.Name.Substring(0, args.Name.IndexOf(
','
)) +
".dll"
;
if
( name ==
"abc.dll"
)
{
string
szRootDic =
""
;
string
szCurrentDic = System.IO.Directory.GetCurrentDirectory();
string
[] szSplit = szCurrentDic.Split(
'\\'
);
List<
string
> SplitList =
new
List<
string
>(szSplit);
if
(SplitList.Count > 2)
{
int
iSplitIndex = 0;
szRootDic =
""
;
foreach
(
string
str
in
SplitList)
{
szRootDic += (str +
@"\"
);
iSplitIndex++;
if
((SplitList.Count - 1) == iSplitIndex)
{
break
;
}
}
}
string
filename = szRootDic +
@"\Dlls\"
+ name;
return
System.Reflection.Assembly.LoadFile(filename);
}
return
null
;
}
* main() 분리하고 원리 기능 분리된 sub main 메쏘드에 이동하기
static
void
Main()
{
AppDomain.CurrentDomain.AssemblyResolve +=
new
ResolveEventHandler(JResolveAssembly);
Main_Core();
}
댓글
댓글 쓰기