从<msbuild> task </msbuild>返回ReferenceCopyLocalPaths

时间:2011-05-28 13:06:47

标签: msbuild task

我有几个<ProjectReferences>的自定义MSBuild项目文件。 我正在调用<MSBuild Projects="@(ProjectReference)" Targets="Build">任务,我可以使用<Output TaskParameter="TargetOutputs" ItemName="OutputAssemblies" />元素获取所有构建的程序集,并且我将@(OutputAssemblies)复制到目标目录。

我希望能够从ResolveAssemblyReferences目标中获取@(ReferenceCopyLocalPaths)项属性,但我无法弄清楚如何输出此属性。

<Target Name="BuildDocumentationForReferencedProjects">
  <MSBuild
    Projects="@(ProjectReference)"
    Targets="Build"
    BuildInParallel="true"
    Properties="DocumentationFile=$(DllDir)\%(FileName).xml"
  >
    <Output TaskParameter="TargetOutputs" ItemName="OutputAssemblies" />
  </MSBuild>

  <Copy SourceFiles="@(OutputAssemblies)" DestinationFolder="$(DllDir)" />
</Target>

1 个答案:

答案 0 :(得分:6)

将以下自定义目标添加到项目文件中,或者添加到要通过...获取此行为的所有项目导入的文件中。

  <Target Name="MyResolveReferences"
    DependsOnTargets="ResolveReferences"
    Returns="@(ReferenceCopyLocalPaths)">
  </Target>

然后,您可以直接调用此目标并捕获您感兴趣的项目数组,因为此暂时目标将其声明为“返回”值,

  <Target Name="BuildDocumentationForReferencedProjects">
   <MSBuild
     Projects="@(ProjectReference)"
     Targets="MyResolveReferences"
     ...
     >
     <Output
        TaskParameter="TargetOutputs"
        ItemName="MyReferenceCopyLocalPaths"
        />
   </MSBuild>
   <Message Text="Paths = '@(MyReferenceCopyLocalPaths)'" />
  </Target>

除了@(ReferenceCopyLocalPaths)之外,还有许多其他可能有趣的项目数组,只需在Microsoft.Common.targets中查看为Re​​solveAssemblyReferences目标中的ResolveAssemblyReference任务调用而声明的所有输出(我的是〜第1400行。