【问题标题】:Return the ReferenceCopyLocalPaths from <MSBuild> task从 <MSBuild> 任务返回 ReferenceCopyLocalPaths
【发布时间】:2011-05-28 13:06:46
【问题描述】:

我有很少的 &lt;ProjectReferences&gt; 的自定义 MSBuild 项目文件。 我正在调用&lt;MSBuild Projects="@(ProjectReference)" Targets="Build"&gt; 任务,我可以使用&lt;Output TaskParameter="TargetOutputs" ItemName="OutputAssemblies" /&gt; 元素获取所有构建的程序集,并将@(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>

【问题讨论】:

    标签: msbuild task


    【解决方案1】:

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

      <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行)。

    【讨论】:

    • 我不知道你可以通过这种方式从 返回值。这是个好主意!
    • 看起来这是一个 .NET 4.0 的东西。知道如何使用 .NET 3.5 做到这一点吗?
    猜你喜欢
    • 2010-11-25
    • 2011-04-26
    • 1970-01-01
    • 2012-07-01
    • 2013-01-02
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多