【问题标题】:Empty an MSBuild ItemGroup清空 MSBuild ItemGroup
【发布时间】:2011-10-26 22:46:36
【问题描述】:

有没有办法在不求助于 Targets 的情况下删除 ItemGroup 的内容?我正在寻找相当于:

<ItemGroup>
  <MyItemGroup Remove="@(MyItemGroup)"/>
</ItemGroup>

谢谢

【问题讨论】:

    标签: msbuild itemgroup


    【解决方案1】:

    不,正如文档所述,Remove 只能包含在 Target 内的 ItemGroup 中。我不确定为什么在您的情况下使用目标是一个问题,但如果想对每个构建配置使用“删除”步骤,请将其添加到 BeforeXXXX AfterXXX 挂钩之一,例如 BeforeBuild。

    ItemGroup 'Remove' Documentation

    从 .NET Framework 3.5 开始,Target 元素可能包含 ItemGroup 元素,而 ItemGroup 元素可能又包含 item 元素。这些项目元素可以包含 Remove 属性,该属性从项目类型中删除特定项目(文件)。例如,以下 XML 会从 Compile 项类型中删除每个 .config 文件。

    <Target>
      <ItemGroup>
        <Compile Remove="*.config"/>
      </ItemGroup>
    </Target>
    

    【讨论】:

    • 你是对的。不可能在目标之外进行。我删除了我的答案,我选择你的答案有用;)
    • @Ludwo - 很高兴知道。我以为我错过了什么。
    • 警告 - *.config 只会匹配实际存在的文件。假设 @(Compile) 是 A.config;B.config 但只有 A.config 存在。然后在 Remove 之后,@(Compile) 仍然会包含 B.config。如果项目不代表文件,则没有通配符 AFAIK。
    • 您希望在 msbuild 脚本中删除哪些 a) 不存在的文件 b) 不是文件?
    • @RitchMelton - MSBuild 脚本中有时会使用不代表文件的项目;例如,参见 XmlPeek 任务 (msdn.microsoft.com/en-us/library/ff598684.aspx) 的 Result 输出参数。此外,即使使用确实代表文件的项目,有时也适合使用Remove 而不查询文件系统;例如,请参阅Microsoft.Common.CurrentVersion.targets 中的这些行:github.com/Microsoft/msbuild/blob/…
    【解决方案2】:

    现在有了。

    What's New in MSBuild 15

    • Item 目标外部元素具有新的 Update 属性。此外,Remove 属性的限制已被取消。

    【讨论】:

    • @RitchMelton 怎么做?能给我代码吗?
    • @walterlv - 这是原始问题中的确切代码:)
    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 2018-08-24
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多