首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateItem vs ItemGroup

CreateItem vs ItemGroup
EN

Stack Overflow用户
提问于 2009-06-02 02:29:59
回答 4查看 12.3K关注 0票数 34

在目标中创建一个项目有什么不同,比如:

代码语言:javascript
复制
<Target Name="DoStuff">
    <CreateItem Include="@(IntermediateAssembly)" >
        <Output TaskParameter="Include" ItemName="FileWrites"/>
    </CreateItem>
</Target>

就像这样:

代码语言:javascript
复制
<Target Name="DoStuff">
    <ItemGroup>
        <FileWrites Include="@(IntermediateAssembly)" />
    </ItemGroup>
</Target>

你会在什么时候使用其中的一个,为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-02 17:23:52

在3.5之前的MSBuild版本中,您不能在目标内部定义属性或项(如第二个示例所示)。因此使用了一个任务(CreateItem和CreateProperty)

如果你使用的是ToolsVersion 3.5,那么你就不需要再使用CreateItem了(尽管如果你愿意,你仍然可以使用)。

最后,它们创建相同的项,具有相同的作用域。使用第二种语法更具可读性,设置自定义元数据也更容易(在我看来)。

注: 3.5版本的MSBuild随.NET 3.5一起安装。尽管您需要在MSBuild文件的Project标记中定义ToolsVersion="3.5"才能使用3.5的特性。

如果你想知道,我从Inside the Microsoft® Build Engine: Using MSBuild and Team Foundation Build这本书中获得了大部分信息,我真的很喜欢它(但与它没有任何关联)。

票数 33
EN

Stack Overflow用户

发布于 2009-06-27 06:46:56

CreateItem和CreateProperty在MSBuild 3.5中被淘汰了(当然,它们将一直继续工作)。很明显,我们需要相同的语法来让ItemGroup和PropertyGroup在目标内部工作。

但是目标内部的ItemGroup有一些特殊的额外能力。它可以修改项目:例如,这会将true添加到Resources list中的所有项目,这些项目的元数据名为Primary,值为true;只有在还没有Copy metadata的情况下:

代码语言:javascript
复制
<ItemGroup>
  <Resources Condition=" '%(Primary)' == 'true' ">
    <Copy Condition=" '%(Copy)' == '' ">true</Copy>
  </Resources>
</ItemGroup>

另一个神奇的功能是:你现在可以从列表中删除项目了。此示例将从资源列表中删除具有值为Bitmap的元数据类型的所有项:

代码语言:javascript
复制
<ItemGroup>
  <Resources Condition=" '%(Type)'=='Bitmap' " Remove="@(Resources)"/>
</ItemGroup>

这些魔法目前只在内部起作用,不能在外部起作用。

有关这方面的详细信息,我强烈推荐MSBuild上的Sayed Hashimi的书。它很容易在亚马逊上找到。

丹-- msbuild团队。

票数 20
EN

Stack Overflow用户

发布于 2009-06-05 17:37:29

我不认为被接受的答案已经定义了区别。

区别在于:

  • ItemGroup脚本为loaded.
  • CreateItem时求值MSBuild执行目标时求值

这可能会导致脚本中项目的值不同。

以一个任务为例,它处理一个目录中与"*.txt“匹配的所有文件。如果在visual studio中加载了MSBuild脚本,则如果使用ItemGroup,则只有VS启动时存在的文件才会出现在该项中。

如果您使用CreateItem -它将在执行目标时搜索所有*.txt文件。

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

https://stackoverflow.com/questions/937681

复制
相关文章

相似问题

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