MSBuild 17:如何生成临时文件夹名称

问题描述 投票:0回答:1

我有一个 MSBuild 项目目标,需要从文件文件夹(我们称之为文件夹 A)创建一个 zip 文件,其中一些文件需要排除而不添加到 zip 文件中,因此目标需要复制文件(排除的文件除外)从FolderA复制到临时文件夹,然后在临时文件夹上调用目标ZipDirectory目标。

我通过创建项目组来创建临时文件夹

<ItemGroup>
       <TempStagingFolder Include="$([System.IO.Path]::Combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName()))" />
 </ItemGroup>

但这永远不会计算为文件夹名称,只是静态方法调用

System.IO.Path

如何在 MSBuild 中创建临时随机文件夹名称以传递到 ZipDirectory 目标?

msbuild
1个回答
2
投票

将您的代码更改为

        <ItemGroup>
            <TempStagingFolder Include="$([System.IO.Path]::Combine($([System.IO.Path]::GetTempPath()), $([System.IO.Path]::GetRandomFileName())))" />
        </ItemGroup>

每个静态属性方法调用都需要用

$()
括起来。

对于故障排除、维护和覆盖,您可能会发现从属性构建文件夹路径和名称很有用,例如:

        <PropertyGroup>
            <TempStagingPath Condition="'$(TempStagingPath)' == ''">$([System.IO.Path]::GetTempPath())</TempStagingPath>
            <TempStagingFolderName Condition="'$(TempStagingFolderName)' == ''">$([System.IO.Path]::GetRandomFileName())</TempStagingFolderName>
            <TempStagingFolder Condition="'$(TempStagingFolder)' == ''">$([System.IO.Path]::Combine($(TempStagingPath), $(TempStagingFolderName)))</TempStagingFolder>
        </PropertyGroup>
        <ItemGroup>
            <TempStagingFolder Include="$(TempStagingFolder)" />
        </ItemGroup>

属性名称和项目名称不冲突。

$(TempStagingFolder)
@(TempStagingFolder)
是不同的“对象”。

通过拥有单独的属性,如果出现问题,您可以检查特定属性。测试该属性尚未设置,允许使用不同的值覆盖该属性。

© www.soinside.com 2019 - 2024. All rights reserved.