문제

TFS 빌드에서 작업을 수행하려고 노력해 왔으며 제가하려는 작업 중 하나는 작업을 사용하여 빌드에 따라 일부 파일을 다른 디렉토리에 복사하는 것입니다. 나는 속성을 사용한다는 아이디어를 가지고 놀았지만 그것을 깨끗하게 할 수있는 방법을 생각할 수 없었기 때문에 같은 대상 파일의 다른 장소에서 그렇게 할 수 있었기 때문에 항목 메타 데이터를 사용하려고했습니다. 나는 이번에 만 일하고 있습니다. 속성을 사용하고 싶습니다.

내가하고 싶은 일은 다음과 같습니다.

<ItemGroup>
  <DestinationParent Include="$(DeploymentPath)">
    <DestinationParentPath>$(DeploymentPath)</QuartzParentPath>
  </DestinationParent>
</ItemGroup>

그리고 나중에 빌드에서 항목 메타 데이터를 참조하여 일부 파일을 대상 폴더에 복사하려고했습니다.

<Copy SourceFiles="@(FilesToCopy)" DestinationFiles="@(FilesToCopy-&gt;'%(DestinationParentPath)\Destination\%(RecursiveDir)%(Filename)%(Extension)')" ContinueOnError="false" ></Copy>

불행히도 빌드가 실행 된 후 내 빌드 로그는 다음을 보여줍니다.

Copying file from "$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\<File being copied>" to "\Destination\<File being copied>".

%(DestinationParentPath)는 어떤 이유로 든 빈 문자열로 확장되었습니다. %(DestinationParent.destinationparentPath)를 사용하면 오류가 발생하여 단순히 %(DestinationParentPath)를 사용해야한다고 말합니다. $ (배포 경로)는 빌드의 다른 여러 장소에서 예상대로 올바른 문자열로 확장됩니다.

또 다른 혼란의 원인은 %(configurationTobuild.flavortobuild)를 사용하는 것이 다음과 같이 올바른 값, 즉 테스트를 산출했다는 것입니다.

편집 : 이것은 루트 노드 프로젝트에 정의되는 반면, 대상 패션 경로가있는 항목 그룹은 대상 노드에 정의됩니다. 이것이 또한 차이를 만듭니다.

<ItemGroup>
  <ConfigurationToBuild Include="Test|Any CPU">
    <FlavorToBuild>Test</FlavorToBuild>
    <PlatformToBuild>Any CPU</PlatformToBuild>
  </ConfigurationToBuild>
</ItemGroup>

"테스트 | 모든 CPU"는 실제 파일을 참조하지 않기 때문에 항목 메타 데이터의 문자열에만 관심이있는 경우 포함 속성이 관련이있는 것처럼 보이지 않습니다.

다시 한 번, %(대상 회전 경로)가 빈 문자열로 확장되는 이유는 무엇입니까?

편집 : 나는 또한 DestinationParentPath의 실제 경로를 하드 코딩하려고 시도했다고 언급하는 것을 잊었지만 여전히 비율 (DestinationParentPath)이 빈 문자열로 확장되었습니다.

도움이 되었습니까?

해결책

편집 : 이것은 루트 노드 프로젝트에 정의되는 반면, 대상 패션 경로가있는 항목 그룹은 대상 노드에 정의됩니다. 이것이 또한 차이를 만듭니다.

예, 그것은 차이를 만듭니다. 대상 내부에서 항목 그룹을 정의하는 기능은 MSBuild 3.5에 새로 사용됩니다. 선언적으로 보이지만 실제로는 런타임에 마치 구식 CreateItem / CreateProperty 작업이라고하는 것처럼 실행됩니다. 그것만으로는 잠재적 인 문제로 이어집니다. 포함 작업이 (첫 번째) 호출 될 때 고려해야합니다. 운영 순서가 육안에 항상 명백한 것은 아닙니다.. "논리적"종속성이 없더라도 %(대상 경로)를 사용하는 작업을 수행하는 작업을 수행하는 것이 현명 할 수 있습니다.

또한, 오래된 MSBuild Scoping Quirks/Bugs가 있습니다. 동적으로 생성 된 속성 및 항목은 "형제"작업에 표시되지 않습니다.. 또한, 중첩 된 빌드에서 업데이트 된 항목이 항상 버블 링되는 것은 아닙니다.

링크의 해결 방법을 확인하십시오. icky이라도 자신에게 맞는 것을 찾을 수 있어야합니다.

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