2009-05-13 5 views
9

.net 래퍼 DLL과 기본 DLL을 사용하는 C# 프로젝트 A가 있습니다. .net 래퍼 DLL을 프로젝트 A의 참조 목록에 추가합니다. 래퍼 DLL은 동일한 폴더에있을 때만 네이티브 DLL과 작동하므로 네이티브 DLL은 프로젝트 A의 출력 디렉터리에 복사해야합니다. 네이티브 DLL을 프로젝트 A의 컨텐트 파일로 추가하고 더 새로운 경우 복사 작업을 설정합니다. 이건 괜찮아.기본 DLL이 출력 디렉토리에 복사되지 않는 이유

C 프로젝트 B가 프로젝트 A를 직접 참조하면 VS는 프로젝트 A에서 사용하는 모든 종속 파일을 프로젝트 B의 출력 디렉터리로 복사합니다. 즉, 래퍼 DLL과 기본 DLL이 프로젝트 B의 출력에 복사됩니다 디렉토리뿐만 아니라. 이것은 잘 작동합니다.

그럼 프로젝트 B를 프로젝트 A가 아니라 프로젝트 C 만 직접 참조하는 C 프로젝트 C가 있습니다. VS가 프로젝트 C의 출력 디렉토리에 원시 DLL을 복사하지 않는다는 것을 보는 것이 흥미 롭습니다. 프로젝트 C가 프로젝트 B의 기능을 사용하고 래퍼 DLL과 함께 작동하도록 네이티브 DLL을 찾으면 찾지 못할 것입니다.

누군가 VS가 네이티브 DLL을 프로젝트 C의 출력 디렉토리에 복사하지 않는 이유를 설명 할 수 있습니까? VS에서 체인 종속 파일을 복사하는 메커니즘은 무엇입니까? 많은 감사합니다.

답변

6

기본적으로 참조 문자열은 전파되지 않으며 맨 위에있는 어셈블리 (예 : exe, 웹 사이트 등)가 필요로하는 모든 것이 로컬 또는 내부에 있음을 보장합니다 (예 : 관리되는 dll) GAC. exe/web-site에 "copy to output"파일을 추가해야합니다.

+0

는 "(우리가 여기 EXE하지 웹 사이트에 대해 얘기) EXE 파일에 파일을 추가하는 방법에 대한 구체적인 수 복사 출력으로 "? 많은 감사합니다. – Steve

+1

exe ​​프로젝트에서 필요한 배포 파일을 반복해서 출력물에 복사하도록 표시해야합니다. –

0

프로젝트 A에서 참조로 네이티브 DLL을 추가하지 않는 이유는 무엇입니까? 이렇게하면 다른 라이브러리에서 A를 사용할 때 항상 포함될 수 있습니다.

편집 : 신경 쓰지 마라. DLL이 COM 또는 .NET 구성 요소 인 경우에만 작동합니다.

+0

이것은 훌륭한 아이디어입니다. 적어도, 이것은 내가 VS 대처 방법을 결정하는 방법입니다. 나는하지 않는다. – Eric

0

프로젝트에 명시 적 종속성이 없기 때문에 빌더는 알려진 바이너리로 출력해야 할 필요가 있음을 알지 못합니다. 할 수있는 일은 빌드 후 구성을 작성하여 컴파일시 해당 DLL을 빌드 대상에 복사하는 것입니다. 당신 Google how to do that 수, 여기에이 작업을 수행하는 방법에 대해 설명 최초의 결과 중 하나입니다 :

http://visualstudiohacks.com/articles/general/customize-your-project-build-process/

관련 문제