如何在不使用ItemsGroup的情况下使用MSBuild Delete任务删除文件列表

时间:2019-06-06 05:56:57

标签: visual-studio msbuild msbuild-task

我知道,可以在<ItemsGroup>的帮助下使用MSBuild Delete任务删除文件列表。如here所述。但是,有一种方法可以不用使用。

基本上可以删除任务,执行类似于<Exec Command="del /f /q *.pdp"/>

的操作

1 个答案:

答案 0 :(得分:2)

似乎您想要的是这样的东西

<Target Name="TestDelete" AfterTargets="xxx">
    <Delete Files="$(Outputpath)*.pdb"/>
</Target>

但是据我所知, msbuild任务参数中无法识别通配符。

因此,恐怕答案是否定的。我建议您在“项目”中使用通配符来引用文件列表。

选中MSBuild ItemsMSBuild Tasks。在官方文档中,只有“ Items”明确声明它支持通配符。

此外,您可以选中此similar issue

更新

实际上不确定特定设计的真正原因。我刚刚阅读了Task Writing文档。并编写一个简单的MyDelete任务进行研究。

public class MyDelete:Task
    {
        [Required]
        public string MyProperty { get; set; }

        public override bool Execute()
        {
            // Log a high-importance comment
            Log.LogMessage(MessageImportance.High,
                "MyDelete Task has delete files: \"" + MyProperty + "\".");
            return true;
        }
    }

然后将以下脚本添加到项目文件中:

<UsingTask TaskName="MyMessage.MyDelete"
        AssemblyFile="MyDelete.dll"/>

  <Target Name="MyTarget" AfterTargets="build">
    <ItemGroup>
      <MyItem Include="$(Outputpath)*.*"/>
    </ItemGroup>
    <MyDelete MyProperty="$(Outputpath)*.*"/>
    <MyDelete MyProperty="@(MyItem)"/>
  </Target>

构建输出应类似于: enter image description here

对于大多数任务,我的猜测是该属性是字符串,因此包含通配符的输入是字符串变量“ path *。*”,该任务的代码无法直接识别< / strong>。

但是对于项,根据文档:项类型是项的命名列表,可以用作任务的参数。因此,输入的是像“ xxx; xxx; xxx ...”这样的字符串,效果很好。

我的更新只是进行深入的研究,难以回答有关设计的特殊原因。我认为,如果您确实想知道设计原因,则可能需要向this link的产品支持者寻求帮助。