2008-11-03 3 views
3

MSBuild에서 특정 솔루션의 모든 프로젝트에서 모든 파일을 추출하고이 파일을 다른 곳으로 전달할 수있는 속성에 보관하는 작업을 호출하고 싶습니다 (처리 등) 작업MSBuild 작업의 솔루션에서 모든 파일 출력

내가의 라인을 따라 뭔가를 생각하고 있었다 :

<ParseSolutionFile SolutionFile="$(TheSolutionFile)"> 
    <Output TaskParameter="FilesFound" ItemName="AllFilesInSolution"/> 
</ParseSolutionFile> 

<Message Text="Found $(AllFilesInSolution)" /> 

하는 솔루션에서 프로젝트 출력 모든 파일의 목록을 것 내가 입력으로 AllFilesInSolution 속성을 사용할 수 있습니다 다른 분석 작업으로 이 작업이 이미 기존 작업입니까 아니면 직접 구축해야합니까? 만약 내가 직접 만들어야한다면, 태스크가 문자열 배열이나 ITaskItems 또는 다른 것을 출력해야합니까?

답변

2

저는 작업에 대해 모르지만 모든 항목을 보유하는 속성이 이미 있습니다. 일반적인 프로젝트 파일을 보면 어떤 컬렉션에 추가되는지 알 수 있습니다.

주 속성 컴파일, 폴더 ... 프로젝트에 파일을 추가 언제든지, 그것은 다음과 같은 주요 컬렉션 중 하나에 넣어됩니다 내용 :

<ItemGroup> 
    <Content Include="Default.aspx" /> 
    <Content Include="Web.config" /> 
</ItemGroup> 
<ItemGroup> 
    <Compile Include="Default.aspx.cs"> 
    <SubType>ASPXCodeBehind</SubType> 
    <DependentUpon>Default.aspx</DependentUpon> 
    </Compile> 
    <Compile Include="Default.aspx.designer.cs"> 
    <DependentUpon>Default.aspx</DependentUpon> 
    </Compile> 
</ItemGroup> 
<ItemGroup> 
    <Folder Include="App_Data\" /> 
</ItemGroup> 

그런 다음 이와 같은 작업을 수행하여 기존 속성의 값을 속성에 넣을 수 있습니다 (조건 속성은 필터의 역할을합니다).

아니면 수동으로 할 수 있습니다 (속성을 포함 기존 속성 OutputPath를 사용하지만 모든 파일을 inclues 경로를 나타냅니다) :

<CreateItem Include="$(OutputPath)\**\*"> 
    <Output TaskParameter="Include" ItemName="OutputFiles" /> 
</CreateItem> 

내가 살 때 읽은 MSDN MSBuild를 문서에 자세한 내용이 있습니다 커스텀 빌드 작업과 매우 유용한 빌어 먹을 물건들. CreateItem 작업을 읽으면 내가 여기 게시 한 내용을 더 잘 이해할 수 있습니다. 데리러 오기가 정말 쉽습니다.

0

SSRS 프로젝트 (빌드 상자에 설치된 TFS없이 빌드하지 않음)가있는 솔루션에 대해 다음을 사용합니다. 기본적으로 RDL을 빌드 출력에 번들로 포함해야 릴리스 용 빌드를 표시 할 수 있습니다.

<Target Name="CopyArtifactstoDropLocation"> 
    <CreateItem Include="$(SolutionRoot)\**\*.*"> 
    <Output TaskParameter="Include" ItemName="YourFilesToCopy" /> 
    </CreateItem> 

    <Copy 
    SourceFiles="@(YourFilesToCopy)" 
    DestinationFiles="@(YourFilesToCopy->'$(DropLocation)\$(BuildNumber)\Release\%(RecursiveDir)%(Filename)%(Extension)')" /> 
</Target> 

복사 작업의 사용을 번들과 관련하여 바꾸십시오. 이렇게하면 솔루션 루트에있는 모든 것을 얻을 수 있지만 TFS를 사용하는 경우 빌드 가능한 아티팩트 만 있어야합니다.

관련 문제