如何从MsBuild项中获取最后一项?
在我的构建脚本中,我拥有代码的和平:如何从MsBuild项中获取最后一项?,msbuild,Msbuild,在我的构建脚本中,我拥有代码的和平: <CreateItem Include="src\packages\**\nunit-console.exe"> <Output TaskParameter="Include" ItemName="NUnitRunners"/> </CreateItem> 当只有一个nunit console.exe时,它会工作,但显然,如果有多个路径退出,它只会连接路径 有没有办法从items集合中获取最后一项 (我的情况是Nun
<CreateItem Include="src\packages\**\nunit-console.exe">
<Output TaskParameter="Include" ItemName="NUnitRunners"/>
</CreateItem>
当只有一个nunit console.exe
时,它会工作,但显然,如果有多个路径退出,它只会连接路径
您可以尝试创建一个
ItemGroup
,然后使用MSBuild.ExtensionPack.Framework.MsBuildHelper
从中提取元素
一些链接:
- 有关MSDN的类似问题:
- MsBuildHelper文档:
<UsingTask TaskName="GetFirstItem" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll">
<ParameterGroup>
<Items ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<FirstItem ParameterType="System.String" Output="true" Required="false" />
</ParameterGroup>
<Task>
<Using Namespace="System.Linq"/>
<Code Type="Fragment" Language="cs">FirstItem = Items.First().ItemSpec;</Code>
</Task>
</UsingTask>
FirstItem=Items.First().ItemSpec代码>
请参见此处的示例:
但最后,我不想增加额外的开销,如果太多/不够,我会给出一条错误消息
<Error Condition="@(NUnitRunners->Count()) != 1" Text="@(NUnitRunners->Count()) nunit runners found." />
这可能有点老套,但您可以通过将
%(Items.Identity)
分配给属性,使用批处理来提取最后一项
提取第一个项目有点棘手,您必须通过创建新项目来颠倒原始项目的顺序
。然后将%(Reversed.Identity)
分配给属性
我不确定这是否会中断,但即使启用了并行构建,对我来说也不错
请参见此处的示例:
<Error Condition="@(NUnitRunners->Count()) != 1" Text="@(NUnitRunners->Count()) nunit runners found." />