【发布时间】:2021-08-27 03:17:33
【问题描述】:
作为构建任务的结果,我有一个如下所示的目录结构:
{BuildOutput}\Database\Customer\Scripts
{BuildOutput}\Database\Customer\obj
{BuildOutput}\Database\Customer\obj\Debug
{BuildOutput}\Database\Logging\Scripts
{BuildOutput}\Database\Logging\obj
{BuildOutput}\Database\Logging\obj\Debug
我正在尝试编写一个 MSBuild 构建任务,该任务将删除“obj”目录及其子目录,但保留其余部分。这里我展示了Customer 和Logging,但由于脚本只构建已更改的项目,因此可能有很多其他项目或根本没有。这似乎有点棘手。
我尝试了很多不同的方法。在 MSBuild 之外的 PowerShell 中,这会选择正确的目录:
[System.IO.Directory]::GetDirectories('$(OutputRoot)\Database', 'obj', ([System.IO.SearchOption]::AllDirectories))
但在 MSBuild 内部:
<ItemGroup>
<UnusedDirs Include="$([System.IO.Directory]::GetDirectories('$(OutputRoot)\Database', 'obj', ([System.IO.SearchOption]::AllDirectories)))" />
</ItemGroup>
<Message Text="Cleaning up non required database directories" />
<RemoveDir Directories="@(UnusedDirs)" />
给出这个错误信息:
D:\Dev\Application\Package.proj(176,29): error MSB4186: Invalid static method invocation syntax: "[System.IO.Directory]::GetDirectories('$(OutputRoot)\Database', 'obj', ([System.IO.SearchOption]::AllDirectories))". Requested value '([System.IO.Sea
rchOption]::AllDirectories)' was not found. Static method invocation should be of the form: $([FullTypeName]::Method()), e.g. $([System.IO.Path]::Combine(`a`, `b`)).
它似乎不理解SearchOption 枚举。有没有办法让它在 MSBuild 中工作?还是有其他方法可以删除这些目录?
【问题讨论】:
标签: msbuild msbuild-task