我有几个<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>
答案 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中查看为ResolveAssemblyReferences目标中的ResolveAssemblyReference任务调用而声明的所有输出(我的是〜第1400行。