从<MSBuild>任务返回ReferenceCopyLocalPaths

Joz*_*zso 1 msbuild task

我有几个自定义MSBuild项目文件<ProjectReferences>.我正在调用<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>
Run Code Online (Sandbox Code Playgroud)

Bri*_*ler 6

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

  <Target Name="MyResolveReferences"
    DependsOnTargets="ResolveReferences"
    Returns="@(ReferenceCopyLocalPaths)">
  </Target>
Run Code Online (Sandbox Code Playgroud)

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

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

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