【发布时间】:2019-06-06 05:56:57
【问题描述】:
我知道,可以在<ItemsGroup> 的帮助下使用 MSBuild Delete 任务删除文件列表。正如提到的here。但是有没有办法在不使用 .
基本上可以删除任务做类似<Exec Command="del /f /q *.pdp"/>的事情
【问题讨论】:
标签: visual-studio msbuild msbuild-task
我知道,可以在<ItemsGroup> 的帮助下使用 MSBuild Delete 任务删除文件列表。正如提到的here。但是有没有办法在不使用 .
基本上可以删除任务做类似<Exec Command="del /f /q *.pdp"/>的事情
【问题讨论】:
标签: visual-studio msbuild msbuild-task
看来你想要的是这样的:
<Target Name="TestDelete" AfterTargets="xxx">
<Delete Files="$(Outputpath)*.pdb"/>
</Target>
但据我所知,通配符在 msbuild 任务参数中无法识别。
所以恐怕答案是否定的。我建议您在 Items 中使用通配符来引用文件列表。
查看MSBuild Items和MSBuild 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>
我的猜测是对于大多数任务,属性是字符串,所以包含通配符的输入是字符串变量“path*.*”,任务代码无法识别直接。
但是对于Item,根据文档:Item类型是命名的项目列表,可以用作任务的参数。所以输入是像“xxx;xxx;xxx...”这样的字符串,表现良好。
我的更新只是为了深入研究,很难回答设计的具体原因。我想如果您确实想知道设计原因,您可能需要通过this link向支持该产品的人寻求帮助。
【讨论】: