如何将项目逐个传递给另一个msbuild任务?

时间:2011-12-15 12:53:09

标签: .net msbuild

我们有x,y,z属性文件并且有一个master.properties文件

现在,我在master.properties文件中写了一些像下面这样的项目组,并将这个项目组传递给msbuild目标,这样它就像foreach一样工作。

项目组:

 <Components Include="Y:\Build\X.Properties">
      <ComponentName>X</ComponentName>
    </Components>

    <Components Include="Y:\Build\Y.Properties">
      <ComponentName>Y</ComponentName>
    </Components>

   <Components Include="Y:\Build\Z.Properties">
      <ComponentName>Z</ComponentName>
    </Components>



<Target Name="BuildAll" Inputs="@(Components)" Outputs="%(Identity).Dummy">

    <MSBuild Projects="@(Components)" 

             Targets="BuildComponent" />

  </Target>

现在我想要一个txt文件,其中组件名称将像这样给出

X ÿ

它应该只构建X和Y.

我尝试使用ReadLinesFromFile,但我无法逐个传递组件。

例如:

 <ReadLinesFromFile File="Allcomponent.txt">
      <Output TaskParameter="Lines" ItemName="AllComponent" />
  </ReadLinesFromFile>

然后我想逐个传递itemgroup中的组件来调用Msbuild任务。

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你的问题不是很清楚,尤其是在“我无法逐一传递”之后。

您可以访问ItemGroup中每个项目的自定义元数据,如下所示:

<Target Name="BuildAll" Inputs="@(Components)" Outputs="%(Identity).Dummy">
    <MSBuild Projects="%(Identity)" 
             Targets="%(ComponentName)" />
</Target>

答案 1 :(得分:0)

最后我找到了解决方案。解决方案如下所示

我应该使用组件名称创建属性。

<X>Y:\Build\X.Properties</X>
<Y>Y:\Build\Y.Properties</Y>
<Z>Y:\Build\Z.Properties</Z>

在Msbuild任务中,我应该遵循以下

<Target Name="BuildAll" >

    <ReadLinesFromFile  File="$(AllComponents)">
      <Output TaskParameter="Lines" ItemName="AllComponents"/>
    </ReadLinesFromFile>

    <MSBuild Projects="$(%(AllComponents.Identity))"

             Targets="BuildComponent" />

</Target>

现在它将构建我通过文本文件的组件。