2012-01-13 2 views
1

3 개의 프로젝트 (C#)가있는 솔루션을 만들고 있습니다.솔루션의 다른 프로젝트에서 참조되는 dll 클래스 라이브러리의 위치를 ​​설정합니다.

  1. 홈페이지 실행 가능한 프로젝트
  2. 의 DLL
  3. 의 DLL

메인 프로젝트는 다른 사람에 대한 참조를 가지고있다.

main.exe 
Libraries - folder 
    + 2.dll 
    + 3.dll 

을하지만 불행하게도 VS는 EXE 위치에 그 DLL 파일을두고있다 : 내 주요 프로젝트의 파일 구조 다음 갖고 싶어.

거기에는 어떤 간단한 해결책이 있나요?

답변

2

자식 DLL의 출력 경로를 라이브러리를 가리 키도록 변경할 수 있습니다.

그러나 이것은 .Net에서 DLL 확인을 위해 런타임에 프로브하는 표준 경로가 아니므로이 위치에서 수동으로로드하지 않으면 배포 할 때 문제가 발생할 수 있습니다.

프로젝트 참조가 로컬 복사로 표시된 경우 Visual Studio에서 구성을 통해 파일을 복사하는 디렉터리를 변경할 수 있다고 생각하지 않습니다.

그러나 각 빌드 후에 파일을 원하는 하위 디렉토리로 자동 이동하는 빌드 후 명령을 설정할 수 있습니다. 그것은 매일 새로운 것을 배우고 나를 수 있기 때문에

업데이트는이 사이트를 사랑 해요. 예를 들어, 표준 탐색 경로에 경로를 추가하기 위해 구성 파일에 추가 할 수있는 probing element을 발견했습니다.

이 구성 요소를 사용하면 .NET에서 libraries 폴더를 검색하여 DLL을로드 할 수 있으므로 추가 작업을 수행 할 필요가 없습니다. (여전히 postbuild를 사용하여 해당 디렉토리로 이동해야합니다. 명령). 저도 같은 문제가

<configuration> 
    <runtime> 
     <assemblyBinding> 
     <probing privatePath="bin\libraries"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
+0

예 나는 알고 있지만 나는이 경로를 바꾸고 싶지 않다. 해당 dll 파일의 사본이 두 개 있습니다. 그들은 프로젝트 디렉토리에 있습니다. VS는 내가 바꾸고 싶은 메인 프로젝트에서 VS를 수행하고 있습니다. – nosbor

+0

@nosbor - 왜죠? 올바른 위치는 응용 프로그램 자체입니다. 복사본이 2 개인 이유는 Visual Studio 때문입니다. 설치 프로그램 솔루션을 설치하고 프로그램을 설치 한 경우 각 프로그램의 사본 한 부를 가져야합니다. 지적한대로 표준 동작이 아니므로 파일을로드해야하고 Visual Studio를 사용하여 파일을 참조해야합니다. 두 개의 복사본이있는 유일한 이유는 동일한 컴퓨터에 솔루션을 구축하기 위해서입니다. 당신이 이것을 바꿀만한 이유는 어리 석다. –

+0

정상적인 동작이 없으며 현재 정상적으로 작동 중입니다. 보기...모든 od dll 프로젝트는 자신의/bin/Debug 디렉토리에 자신의 dll 컴파일 된 어셈블리가 있고 그 외에 VS는 해당 어셈블리를 기본 프로젝트/bin/Debug 폴더에 복사합니다. 그리고 그것을/bin/Debug/Libraries로 변경하고 싶습니다. – nosbor

1

하지만, 앞의 예는 작동하지 않습니다 여기에

이 구성을 지원하기위한 샘플 설정 항목입니다. 내가 계획을 지적한 후에 만 ​​모든 것이 잘 작동했다 :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="Libraries"/> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

+1 나는 'assemblyBinding' 조항 중 어느 것도 나를 위해 일하지 않는다는 것을 발견하면서 이것을 더 빨리 발견했으면 좋겠다. – vossad01

관련 문제