[windows] DLL 종속성을 확인하는 방법?

때로는 작은 프로젝트를 수행 할 때 충분히주의하지 않고 실수로 내가 알지 못하는 DLL에 대한 종속성을 추가합니다. 이 프로그램을 친구 나 다른 사람에게 배송 할 때 “일부 DLL”이 없기 때문에 “작동하지 않습니다”. 물론 프로그램이 내 시스템에서 DLL을 찾을 수는 있지만 DLL은 찾을 수 없기 때문입니다.

DLL 종속성에 대한 실행 파일을 스캔하거나 “깨끗한”DLL이없는 환경에서 프로그램을 실행하여 이러한 oops 상황 을 방지하는 방법이 있습니까?



답변

Dependency Walker(2006의 마지막 업데이트) 또는이라고 불리는 현대적인 재 작성을 시도하십시오 Dependencies.


답변

dumpbin Visual Studio 도구 (VC \ bin 폴더)에서 도움이 될 수 있습니다.

dumpbin /dependents your_dll_file.dll


답변

나는 리눅스 팬들을위한 흥미로운 솔루션을 추천 할 수있다. 이 솔루션을 살펴본 후 DependencyWalker에서 이것으로 전환했습니다.

lddWindows 관련 exe,을 (를) 통해 즐겨 찾기 를 사용할 수 있습니다 dll.

이렇게하려면 Windows에 Cygwin (추가 패키지없이 기본 설치)을 설치 한 다음 시작하면 Cygwin Terminal됩니다. 이제 다음을 포함하여 좋아하는 Linux 명령을 실행할 수 있습니다.

$ ldd your_dll_file.dll

UPD : Windowsldd 에서 git bash 터미널을 통해서도 사용할 수 있습니다 . git이 이미 설치되어있는 경우 cygwin을 설치할 필요가 없습니다.


답변

  1. 작업하려는 어셈블리의 전체 파일 경로를 파악하십시오.

  2. 시작 버튼을 누르고 “dev”를 입력하십시오. “VS 2017 용 개발자 명령 프롬프트”라는 프로그램을 시작하십시오.

  3. 열린 창에서을 입력하십시오 dumpbin /dependents [path]. 여기서 [path]1 단계에서 알아 낸 경로는

  4. Enter 키를 누르십시오

Bam, 당신은 당신의 의존성 정보를 가지고 있습니다. 창은 다음과 같아야합니다.

여기에 이미지 설명을 입력하십시오

VS 2019 용 업데이트 : VS 설치에이 패키지가 필요합니다.여기에 이미지 설명을 입력하십시오


답변

  1. “종속”이라는 프로그램이 있습니다
  2. cygwin이 설치되어 있으면 ldd file.exe보다 간단하지 않습니다.

답변

가장 안전한 것은 프로그램을 테스트 할 수있는 깨끗한 가상 머신이 있다는 것입니다. 테스트하려는 모든 버전에서 VM을 초기 깨끗한 값으로 복원하십시오. 그런 다음 설정을 사용하여 프로그램을 설치하고 작동하는지 확인하십시오.

딜 문제는 얼굴이 다릅니다. Visual Studio를 사용하고 CRT에 동적으로 연결하는 경우 CRT DLL을 배포해야합니다. VS를 업데이트하면 다른 버전의 CRT를 배포해야합니다. 의존성을 확인하는 것만으로는 충분하지 않습니다. 깨끗한 기계에 전체 설치를하는 것이 유일한 안전한 솔루션 인 IMO입니다.

완전한 테스트 환경을 설정하지 않고 Windows 7을 사용하려는 경우 XP-Mode를 초기 클린 머신으로 사용하고 XP-More 를 사용하여 VM을 복제 할 수 있습니다.


답변

개발 머신에서 프로그램을 실행하고 Sysinternals Process Explorer를 실행할 수 있습니다 . 아래쪽 창에는 여러 가지 이유로 편리한로드 된 DLL과 현재 경로가 표시됩니다. 배포 패키지를 실행하면 잘못된 경로에서 참조되는 DLL이 표시됩니다 (즉, 올바르게 패키지화되지 않음).

현재 우리 회사는 Visual Studio Installer 프로젝트를 사용하여 종속성 트리를 걷고 프로그램을 느슨한 파일로 출력합니다. VS2013에서는 이제 확장명이 https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d 입니다. 그런 다음이 느슨한 파일을보다 포괄적 인 설치 프로그램으로 패키지화하지만 적어도 해당 설정은 모든 닷넷 종속성을 투영하여 한 지점으로 드롭하고 누락 된 경우 경고합니다.