많은 프로젝트가 포함 된 솔루션의 일부로 솔루션의 다른 세 가지 프로젝트와 <ProjectReference>
을 통해 참조하는 프로젝트가 있습니다. AfterBuild
에서 3 개의 특정 종속 프로젝트의 출력을 다른 위치로 복사해야합니다. 등이중 재 구축을 트리거하지 않고 MSBuild에서 ProjectReference의 출력 확인
, 나는 그것을 달성하기 위해에 정착하는 방식이었다 :
<MSBuild
Projects="@(ProjectReference)"
Targets="Build"
BuildInParallel="true"
Condition="'%(Name)'=='ProjectA' OR '%(Name)'=='ProjectB' OR '%(Name)'=='ProjectC'">
<Output TaskParameter="TargetOutputs" ItemName="DependentAssemblies" />
</MSBuild>
<Copy SourceFiles="@(DependentAssemblies)" DestinationFolder="XX" SkipUnchangedFiles="true" />
그러나, 나는이 문제로 달렸다. <MSBuild
단계의 IncrementalClean
작업은 ProjectC
개의 출력을 삭제합니다. 이 VS2008에서 실행할 때 build.force
파일을 obj/Debug
폴더에있는 ProjectC 다음 ProjectC이이 AfterBuild
대상이 포함 된 경우 전체 솔루션 빌드를 다시 빌드하는 트리거하는 반면, 하나가 빌드에서이 프로젝트를 제외하면, [올바르게] ProjectC를 다시 빌드하지 않습니다 (). ProjectC의 모든 종속 프로그램을 다시 빌드합니다. 이것은 TeamBuild 또는 다른 명령 행 MSBuild 호출의 컨텍스트에서 발생하지 않는 VS 특정 속임수 일 수 있습니다 (그러나 가장 일반적인 사용은 VS를 통해 이루어 지므로 어떤 방법 으로든 해결해야합니다)
종속 프로젝트 (및 솔루션의 나머지 부분)는 VS와 대화식으로 생성되었으므로 ProjectRefence
에는 상대 경로가 포함되어 있습니다. 문제를 일으킬 가능성이 있다는 언급을 보았습니다. 또는 그것이 고쳐질 것이거나 그것의 주위에 일하는 방법. 다른 말로하면, 나는 정말로 예를 들어 관심이 없다. .csproj를 직접 편집하여 ProjectReference
경로를 절대 경로로 변환합니다.
그것이 내가 멍청한 짓을하고있어 전적으로 가능하고 사람이 바로, 나는 내가 시도 havent 한 있지만 (등 /v:diag
이상의 출력을 탐독 많은 시간을 보냈다 확신 할 (좋을 것이다)이 무엇인지 지적되지만 최대 지상에서 생식을 구축 -이 상대적으로 복잡한 전체 빌드의 문맥)에
감사합니다. 첫 번째 답변으로이 퍼즐을 선택해 주셔서 감사합니다. 나는 개인적으로 MSBuild의 내부 구조에 대한 의존성을 소개하는 것에 대해 과묵 할 것입니다. 그러나 그렇습니다. 이것은 "프로그램이 작성한 파일"을 프로그램 적으로 얻을 수있게 해줄 것입니다. 여기에 몇 가지 다른 "산출물 산출"질문이 있으므로 답이 더 잘 맞을 것입니다. 나에게 가장 큰 이슈는'