2011-09-06 5 views
1

C# 폼 응용 프로그램에서 Intel 성능 프리미티브를 사용하는 C++ DLL (자체 작성 중)을 구현하려고합니다. 프로그램을 실행하려고하면 "DLL을 찾을 수 없음 예외"가 나타납니다. 이 사이트의 다른 게시물에 제시된 한 가지 가능한 이유는 참조되어야하는 종속 DLL이 있으며 실제로 DpendencyWalker를 다운로드 한 후 내 DLL이 "IPPS-7.0.DLL"을 사용한다는 사실입니다.DLL을 찾을 수 없음 : 종속 DLL을 참조하는 중

제 문제는 이러한 종속 DLL을 참조하는 방법이 제게 불분명하다는 것입니다. 나는 IPPS-7.0.DLL 폴더를 참조 경로에 추가하고 "IntelCppOptPkg"및 "IntelLibOptPgk"어셈블리에 대한 참조를 추가했지만이 문제는 해결되지 않았습니다.

그래서이게 문제라고 생각하면 정확합니까? 그렇다면 관리 코드에서 DLL을 참조하는 방법은 무엇입니까?

감사합니다.

답변

1

관리되는 코드는 관리되는 어셈블리를 참조하는 것과 같은 방식으로 관리되지 않는 dll을 참조 할 수 없습니다. 관리되는 참조는 실제로 어셈블리의 메타 데이터를 변경합니다.

컴파일러는 빌드시 어셈블리 참고 정보의 메타 데이터에 정적 참조를 기록합니다. ... 어셈블리를 참조하는 가장 좋은 방법은 어셈블리 이름, 버전, 문화권 및 공개 키 토큰 (있는 경우)이 포함 된 전체 참조 을 사용하는 것입니다.

네이티브 dll에는이. NET 메타 데이터가 연결되어 있지 않습니다. 게시 후 단계 또는 배포 중에 수동으로 복사해야합니다. workaround이 있지만 관리되는 응용 프로그램이 플랫폼 독립적 (모든 CPU)이고 관리되지 않는 dll의 x86 및 x64 버전이있는 경우에는 작동하지 않을 것이라고 생각합니다.

2

참조하지 않으며 .NET 어셈블리가 아닙니다. DLL이 빌드 디렉토리에 복사되는지 확인해야합니다. 가장 쉬운 방법은 Project + Add Existing Item을 사용하여 복사 된 위치에서 DLL을 선택하는 것입니다. 그런 다음 추가 된 파일을 선택하고 속성 창에서 Build Action = Content, Copy to Output Directory = Copy new를 선택하십시오. 소스 제어에서 DLL 체크인은 일반적으로 좋은 아이디어입니다.

+1

그리고 귀하의 경우에는 pdb도 체크인합니다. –

관련 문제