2012-02-20 2 views
-1

Visual Studio를 사용하여 C# 프로그램을 만들고 있습니다. 내가로드중인 타사 DLL이 있습니다. 그것은 작동하지만, 나는 그것이 컴파일 디렉토리의 하위 디렉토리에 있기를 원한다. (Release 대신 Release \ lib \). exe.config 파일을 사용하여이 작업을 수행 할 수 있지만 사용자가 프로그램에서 DLL을 찾는 위치를 변경할 수 없도록하고 싶습니다. 그렇다면 exe.config를 사용하지 않고 하위 디렉토리에서 DLL을 어떻게 참조합니까?Visual Studio - 컴파일 폴더 외부에서 참조로드

+0

폴더에 복사 .. 현재 참조를 제거한 다음 참조로 이동하여 .dll이 위치한 위치를 추가하고 탐색하십시오. 여기에 질문이 있습니다. 응용 프로그램을 배포 할 때 .. 대상 컴퓨터에서 로컬에 배치 할 위치에 따라 폴더를 만들지 아니면 copy local = true ..를 설정 하시겠습니까? 대상 컴퓨터로 포팅하는 경우 GAC 사용에 대해 생각해 보셨습니까? – MethodMan

+0

나는 이미 그것을 시도했다 ... 그것은 출력 디렉토리에 그것을 복사하거나, 내가 끄면 런타임에 오류를 준다. 대상 컴퓨터에는 exe가있는 bin 폴더가 있고 그 안에 dll이있는 lib 폴더가 있습니다. 또한 다른 것들도 있지만 지금은 중요하지 않습니다. 또한 사람들이 GAC를 사용할 수 있다고 말한 다른 게시물을 보았지만 매우 나쁜 아이디어였습니다 ... 그렇게하지 않으면 가능하면 더 좋을 것입니다. – Aidan

답변

0

도메인에 대해 AppDomainSetup.PrivateBinPath 속성 설정이 필요하다고 생각합니다. 이 속성에서 참조 어셈블리가있는 폴더 경로 (";"로 구분 된 경우)를 지정하십시오. 이 방법으로 필요한 참조를 위해 지정된 디렉토리를 찾기 위해 어셈블리에 서명합니다.

이 속성은 하위 디렉토리 인 bin 디렉토리에 대해서만 작동하므로주의해야합니다.

편집

예 :

AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path1;path2;..."; 

행운을 빕니다.

+0

좋아요,이게 내가 필요한 것 같아요. 미안해, 나는 이런 종류의 물건으로는 좋지 않다. 내 Program.cs에서 Main() 함수의 맨 위에 AppDomainSetup을 두었습니다. appdomainsetup = new AppDomainSetup(); \t \t \t appdomainsetup.PrivateBinPath = "\\ lib \\"; 어떻게 그 변수를 사용합니까? – Aidan

+0

@ 에이 단 : 체크 아웃 내 편집 된 댓글 – Tigran

+0

그건 작동하지 않습니다 : /. 변경된 직후에 변경된 값을 인쇄 해 보았습니다. 아무 것도 나오지 않았습니다. 즉, 변수를 업데이트하지 않는다는 뜻입니다. 나는 당신이해야 할 일은 새로운 도메인을 만들고 그것을 설정하는 것이라고 생각합니다. 나는 지금 그것을하는 방법을 이해하려고 노력하고있다. ... – Aidan

0

dll을로드하기 전에 PrivateBinPath를 지정하는 것이 중요합니다.

static class Program 
{ 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path"; 
     Application.Run(new Form1()); 
    } 
} 

그리고 응용 프로그램 폴더에 DLL을 우리가 지정 PrivateBinPath 폴더에 다른 DLL을 필요로하는 경우, 그것은 작동하지 않습니다. 모든 dll은 같은 폴더에 있어야합니다 ...

관련 문제