2010-01-15 2 views
4

파일 집합을 처리하고 이에 대한 수정 된 하위 집합을 반환하는 사용자 지정 MSBuild 작업이 있습니다. 기본적으로, 입력에서 새로운 아이템 마스크 배열을 생성하고 일부 아이템을 건너 뛰기 만합니다. 이 결과 집합은 MSBuild에 반환 될 때MSBuild ITaskItem RecursiveDir 메타 데이터가 사라집니다.

그러나, RecursiveDir 메타 데이터가 사라집니다! 내 사용자 지정 작업의 Execute() 메서드 끝에 올바른 값이 여전히 있지만 MSBuild에서 RecursiveDir을 사용하려고하면 빈 상태입니다. 이것은 물론, 꽤 문제입니다!

어떻게해야합니까? 이게 정상인가? Filename과 Extension과 같은 다른 메타 데이터는 여전히 존재합니다. ID는 올바른 파일을 가리 킵니다. 내 사용자 지정 작업에서 어떤 방식 으로든 메타 데이터를 수정하지는 않습니다.

내가 다른 MSBuild를 태스크 라이브러리는 또한 특별한 처리없이 ITaskItem의 배열을 돌려 보았다. 그러나 아무도이 문제를 다루지 못했습니까? 기괴한!

MSBuild 3.5를 사용하고 있습니다.

답변

1

예, 정상입니다. 그것에 대해 할 수있는 일이 없습니다. 나는 MSBuild 소스 코드를 훑어 보았다. 분명히 사용자 지정 작업으로 들어가는 항목과 다시 나오는 항목은 완전히 다른 것들이다. MSBuild는 처음에는 매우 특별한 항목을 만들고 나중에 "멍청하게"됩니다.

나는 그런 경우에 발견 된 솔루션 :

  1. 이 모든 것을 포함하는 ItemGroup을 만듭니다.
  2. 는을 제거 할 파일이있는 ItemGroup 를 생성하는 사용자 지정 작업을 만듭니다.
  3. 사용 < 난 그냥이 똑같은 문제로 실행/>
1

= "@ (ListFromCustomTask)"을 제거 ItemGroup. 성공적으로 "RecursiveDir"메타 데이터 값을 현재 값으로 설정하여이 "한계"(제 의견으로는 MSBuild 버그)를 성공적으로 해결할 수있었습니다.

이 일 후, 내 출력 ITaskItem[]는 값을 유지했다.