2009-10-05 4 views
6

Managed C++ 프로젝트를 참조하는 C# GUI 응용 프로그램이 있습니다.이 프로젝트에는 7 개의 네이티브 C++ DLL이 필요합니다. 나는이 7 개의 DLL을 최종 프로젝트 출력에 복사하는 가장 깨끗한 방법을 찾고있다.
복사 출력 디렉토리 ==가 복사 항상 ".NET 프로젝트에서 네이티브 DLL을 복사하는 가장 깨끗한 방법

으로

빌드 작업 =="콘텐츠 "
이 지정하는 C#을 응용 프로그램에 모든 DLL을 추가 작동 무엇

이렇게하면 프로젝트의 기본 폴더가 어떤 경우에 참조 된 프로젝트의 요구 사항이고 프로젝트 자체가 아닌 DLL의 엉망이됩니다.

위의 설정과 함께 "필요한 DLL이"라는 이름의 폴더에이 DLL을 추가

  • 작동하지 않습니다 무엇3210

    . 출력에 같은 이름의 폴더에 복사하여 잘못된 위치에있게합니다. 나는 출력 디렉토리를 지정하는 방법을 볼 수 없다.

  • 임베디드 리소스 : C# P/Invoke에서 참조하는 DLL을 포함 리소스로 추가 할 수 있으며 DLL은 최종 라이브러리 내에 포함됩니다. Managed C++에서이 가능성을 보지 못했으며 참조 체인과 함께 작동하는지 확신 할 수 없습니다.
  • Managed C++ 프로젝트의 내용으로 DLL 추가. 파일은 출력 디렉토리에 복사되지 않습니다.

이 경우 가장 좋은 해결책은 무엇입니까? 가능한 경우 Managed C++ 프로젝트가 자체 DLL 요구 사항을 처리 할 수 ​​있도록하는 것이 좋으며 여러 응용 프로그램에서 프로젝트를 사용하지 못하도록하는 것이 바람직합니다.

깨끗한 프로젝트가 진행되는 한, 프로젝트의 하위 폴더에 모든 코드 파일을 삽입하고 루트에서 DLL을 사용하여 첫 번째 솔루션을 작동시키는 것이 더 좋습니다.

솔루션 : 조셉에서 빌드 후 제안을 사용
다음 명령은 "필요한 DLL이"폴더를 사용하는 트릭을 수행합니다.

XCOPY "$ (PROJECTDIR) 필요한 DLL이 *. *", "$ (TARGETDIR)"/ Q/Y

/Q 출력에서 ​​개별 파일을 숨기고/Y 프롬프트를 덮어 억제 .

답변

6

빌드 후 이벤트를 사용하여 디렉토리의 내용 (예 : "필수 DLL"디렉토리)을 프로젝트의 출력 디렉토리로 복사 할 수 있습니다.

+1

어떤 이유로 든 포스트 빌드 이벤트를 생각조차하지 못했습니다. 이것은 나를 위해 꽤 잘 작동하고, 나는 질문에 사용한 정확한 포스트 빌드를 게시했습니다. 감사. –

0
  1. 동적 대신 정적 라이브러리로 작업하면 dll을 더 크게 만들 수 있지만 여러 개가 아닌 하나의 dll은 시간 절약뿐만 아니라 사용자의 측면 에서뿐만 아닙니다.
  2. 솔루션의 모든 프로젝트를 단일 디렉터리 (관리되는 버전과 관리되지 않는 버전)로 라우팅하십시오.
+0

정적 라이브러리는 나와 함께 괜찮지 만 Managed C++에서 프로젝트를 설정하는 행운을 빕니다. 당신은 저를 돕는 데 도움이 될 조언이나 자료가 있습니까? –

+0

@Guard 정적 관리 C++ lib를 할 수 없기 때문에, 관리 C++이 필요로하는 libs에 문제가 있다고 생각했습니다 (정적 일 수 있음). –

관련 문제