首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild:项目+批处理+ CreateItem +转换问题

MSBuild:项目+批处理+ CreateItem +转换问题
EN

Stack Overflow用户
提问于 2009-04-28 19:00:28
回答 2查看 1.9K关注 0票数 2

我有一个msbuild项目,这让我想知道为什么结果是这样的。这并不是说它造成了问题或任何类似的事情,但我想试着更好地理解它。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="TestTarget1;TestTarget2" ToolsVersion="3.5">

  <ItemGroup>
    <PathDir Include="C:\RootDir\UniqueDir1"/>
    <PathDir Include="C:\RootDir\UniqueDir2" />
  </ItemGroup>

  <Target Name="TestTarget1" Outputs="%(PathDir.Identity)">
    <PropertyGroup>
      <RootPath>%(PathDir.Identity)</RootPath>
    </PropertyGroup>

    <ItemGroup>
      <SubDirectory Include="Common1"/>
      <SubDirectory Include="Common2"/>
    </ItemGroup>

    <CreateItem Include="@(SubDirectory->'$(RootPath)\%(Identity)')">
      <Output TaskParameter="Include" ItemName="FullPath"/>
    </CreateItem>

    <Message Text="@(FullPath)"/>
  </Target>

  <Target Name="TestTarget2">
    <Message Text="@(FullPath)"/>
  </Target>

</Project>

因此,我有两个唯一的主路径,并且在每个主路径中,我有两个目录,每个唯一路径中的名称相同。在target1中,我根据PathDir中的项的标识进行批处理,然后对项SubDirectory执行转换,以创建一个包含完整路径的新项。因此,在这之后,目标的输出如下所示:

目标1:

代码语言:javascript
复制
  C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2
  C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2

目标2:

代码语言:javascript
复制
  C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2

所以我想我的问题是...为什么target1只显示包含要批量处理的目录的目录?我知道这可能与批处理有关,但这是我所知道的全部。

EN

回答 2

Stack Overflow用户

发布于 2009-09-10 04:28:48

当一个目标被批处理时,它独立于同一批处理目标的其他执行而执行。因此,在第一次执行中,您将FullPath项填充到内容中

代码语言:javascript
复制
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2

然后,在第二次执行目标时,将FullPath的值填充为

代码语言:javascript
复制
C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2

由于项目对同一批处理目标不可见,因此第二次传递不会“看到”该FullPath项目。但是当TestTarget1完成时,FullPath的值被组合成一个值,即。

代码语言:javascript
复制
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2

这样说清楚了吗?批处理有时会让人感到困惑。

以下是有关批处理的一些链接:

  • MSBuild Batching Part 1
  • MSBuild Batching Part 2
  • MSBuild Batching Part 3
  • MSBuild RE: Enforcing the Build Agent in a Team Build
票数 3
EN

Stack Overflow用户

发布于 2009-04-29 08:51:37

这不是

代码语言:javascript
复制
<PropertyGroup>
  <RootPath>%(PathDir.Identity)</RootPath>
</PropertyGroup>

再加上

代码语言:javascript
复制
<CreateItem Include="@(SubDirectory->'$(RootPath)\%(Identity)')">

这导致了2x2而不是1x4

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/799389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档