2

몇 가지 프로젝트 (주로 C++)가있는 Visual Studio 솔루션 파일이 있는데
대부분이 출력 디렉토리가 "bin"디렉토리로 설정된 매우 일반적인 방식으로 구성되어 있습니다.
"bin"의 하위 디렉토리 (즉, "bin \ others")로 출력되도록 기본 출력 대상을 지정해야하지만 일부 DLL 종속성 (NuGet 패키지로 관리 됨)은 계속 "bin"디렉토리에 복사됩니다 .
출력 경로의 구조는 다음과 같습니다컴파일 된 대상을 종속성 DLL이 아닌 다른 폴더에 출력하는 올바른 방법은 무엇입니까?

("다른 사람"프로젝트 \ bin에있는 EXE에 의해 런타임에로드 된 DLL이기 때문에 의존성이 EXE 경로에서 찾을 수 있어야하므로 종속 DLL은 \ 빈에 있어야합니다) 모든 NuGet 종속성도 동일한 출력에 복사되기 때문에

  1. 변경 $ (OUTDIR) "기타"프로젝트를 위해,하지만이 작동하지 않습니다 지금까지 시도했습니다 무엇

    \bin (main EXE and ALL dependencies DLLs) 
    \bin\others (others projects, with their dependencies DLL in \bin) 
    

    예배 규칙서.

  2. \ bin에 $ (OutDir)을 유지하지만 "타사"프로젝트의 TargetName을 "others \ $ (ProjectName)"로 변경하십시오.하지만 MSBuild (자동 빌드)에서 clean로 재 빌드 할 때 오류가 발생합니다 사실 Microsoft.CppClean.targets 파일 VC++ 프로젝트에 기본적으로 포함 된 파일은 "$ (IntDir) $ (TargetName) .Build.CppClean.log"에 쓰기를 시도하지만 존재하지 않습니다 ("$ (IntDir) \ others \ "디렉토리가 아직 생성되지 않았습니다).

내가 명령과 같은 cmd를이 MSBuild를 통해 병렬 자동화 된 빌드에 문제가 있고, 프로젝트 내부의 MSBuild 작업이 (VS IDE가 AFAIK, 그들을 suppert하지 않습니다) 수동으로 유지해야하기 때문에 작업을 포스트 구축하지 않도록하고 싶습니다.

이 문제를 해결하는 방법에 대한 의견이나 제안이 있으십니까?

+0

매우 실용적입니다. 빌드 문제 때문에뿐만 아니라 다음 문제를 해결할 방법을 설명하지 않았습니다. 운영 체제는 "그 외"폴더에 종속성을 찾을 기회가별로 없기 때문에 거기에 표시되지 않습니다. 좋은 Q + A는 세부 정보도 지정해야합니다. –

+0

@HansPassant 당신의 요지는 잘 모르겠지만 Windows에서는 EXE ("bin"폴더에서)를 실행하면 "dinamically"bin \ others 폴더에서 DLLS가로드되고 종속성은 "bin"에서 올바르게 발견됩니다. 왜 내가 그들을 "빈 \ 기타"가 아니라 거기에 머물러있게 할 필요가 있는지. – roalz

답변

2

기본 dll 검색 경로에는 PATH 환경 변수 (MSDN: standard search order for desktop applications)에 나열된 디렉터리가 포함됩니다.

디버그 환경 "구성 등록 정보 -> 디버깅 -> 환경"에서 PATH 변수에 필요한 경로를 추가하는 것을 고려할 수 있습니다. 뭔가 : "PATH = $ PATH; $ (SolutionDir) \ bin \ others".

+0

좋은 조언이지만, 불행히도 내 경우에는 의존성 DLL이 \ bin \에 남아 있어야합니다. EXE는 다른 이유로도 있습니다. "다른"디렉토리에는 "다른"프로젝트 출력 만 (DLL)이 있어야합니다. . – roalz