使在MSBuild目标中创建的ItemGroup对调用目标可用

使在MSBuild目标中创建的ItemGroup对调用目标可用,msbuild,targets,Msbuild,Targets,如果我在MSBuild文件中具有以下目标: <Target Name="Temp"> <CallTarget Targets="CreateTestList" /> <Message Text="TestList: -- @(TestAssembly) -- " /> <Message Text="Testing &quot;%(TestAssembly.Identity)&quot;" /> </Targe

如果我在MSBuild文件中具有以下目标:

<Target Name="Temp">
   <CallTarget Targets="CreateTestList" />
   <Message Text="TestList: -- @(TestAssembly) -- " />
   <Message Text="Testing &quot;%(TestAssembly.Identity)&quot;" />
</Target>   

<Target Name="CreateTestList">
     <CreateItem Include="**\bin\$(Configuration)\*Tests.dll">
          <Output TaskParameter="Include" ItemName="TestAssembly" />
     </CreateItem>
     <Message Text="TestList: -- @(TestAssembly) -- " />
     <Message Text="Testing &quot;%(TestAssembly.Identity)&quot;" />
</Target>


如何使我的
Temp
target中的消息语句打印出
CreateTestList
target放入@(TestAssemblyList)项目组的项目?

需要注意两件事。首先,CreateItem任务基本上已经过时。只需在目标中声明一个ItemGroup,就可以让它更具可读性。其次,由于MSBuild发布项的方式,您需要使CreateTestList目标作为依赖项运行,而不是与CallTarget一起运行,这在大多数情况下用处有限。所以

<Target Name="Temp" DependsOnTargets="CreateTestList">
   <Message
      ...
</Target>

<Target Name="CreateTestList">     
   <ItemGroup>
      <TestAssembly Include="**\bin\$(Configuration)\*Tests.dll">
   </ItemGroup>
   <Message
      ...
</Target>


有两件事需要注意。首先,CreateItem任务基本上已经过时。只需在目标中声明一个ItemGroup,就可以让它更具可读性。其次,由于MSBuild发布项的方式,您需要使CreateTestList目标作为依赖项运行,而不是与CallTarget一起运行,这在大多数情况下用处有限。所以

<Target Name="Temp" DependsOnTargets="CreateTestList">
   <Message
      ...
</Target>

<Target Name="CreateTestList">     
   <ItemGroup>
      <TestAssembly Include="**\bin\$(Configuration)\*Tests.dll">
   </ItemGroup>
   <Message
      ...
</Target>