문제

내 빌드에는 사용자 정의 대상 (다른 사본 작업 그룹)이있어 여러 장소의 변경에 영향을 미치기 위해 몇 번 전화해야합니다. 그러나 이것은 처음으로 호출되는 경우에만 실행되며, 그 후 TFS 빌드는 해당 대상을 건너 뜁니다.

프로세스는 다음과 같습니다.

<!-- Copy some files to another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

...

<!-- Copy the above files to yet another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

빌드 로그에서 대상 "카피 파일"이 두 번째로 건너 뜁니다.

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

왜 이런 일이 일어나고 있습니까? 대상 (또는 내가 쓴 사용자 정의 대상)을 여러 번 실행하도록 강요하는 방법이 있습니까?

도움이 되었습니까?

해결책

매개 변수 세트 당 MSBuild 인스턴스 당 한 번 호출해야합니다. 팀 빌드는 일부 상황에서 별도의 MSBuild 인스턴스를 분사합니다 (예 : 둘 이상의 솔루션 구성을 제공하는 경우). 그러나 그것은 아마도 당신을 도와주지 않을 것입니다.

시나리오에 더 적용 할 수있는 MSBuild는 다른 매개 변수 세트로 호출하면 작업을 다시 실행합니다. 원하는 기능과 같은 두 개의 다른 파일 세트를 복사하는 경우.

<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=1" />
<!--  ....  -->
<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=2" />

다른 솔루션은 기능을 대상 대신 작업으로 리팩터링하는 것입니다. 아직 선언적 인 절차 적 단점이 있지만, 작업은 더 친숙한 언어의 "기능"으로 생각하는 것에 훨씬 더 가깝게 행동합니다.

다른 팁

이것은 디자인에 의한 것입니다. 대상은 "방법"으로 생각해서는 안됩니다. MSBuild는 더 선언적입니다. 따라서 실행 된 목표를 추적하고 의도적으로 이미 완료된 목표를 건너 뜁니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top