gpt4 book ai didi

c# - 将包含通配符的 MSBuild 属性展开到项中

转载 作者:太空狗 更新时间:2023-10-30 00:43:59 26 4
gpt4 key购买 nike

我正在尝试编写 MSBuild 脚本,该脚本将对某个预定义目录 (F:\Files) 中的任意文件(在命令行上指定为属性)执行某些操作(例如打印其路径)。

给定以下目录结构

F:\Files\TextFile.txt
F:\Files\Subdir1\ImageFile.bmp
F:\Files\Subdir1\SubSubdir\ImageFile2.bmp
F:\Files\Subdir1\SubSubdir\TextFile2.txt

和 MSBuild 脚本

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="PrintNames" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetDir>F:\Files</TargetDir>
</PropertyGroup>

<ItemGroup>
<Files Include="$(TargetDir)\$(InputFiles)"/>
</ItemGroup>

<Target Name="PrintNames">
<Message Text="Files: @(Files, ', ')" />
</Target>
</Project>

在 InputFiles 设置为“**\*.bmp;**\*.txt”的情况下运行脚本仅适用于 bmp 文件。 txt 文件取自当前工作目录,而不是“F:\Files”

最佳答案

有两个问题需要解决:

  1. $(InputFiles) 被指定为标量属性,但您想将其解释为数组
  2. $(InputFiles) 包含您希望在对 $(InputFiles) 中的模式列表进行转换之后展开的通配符。

两个问题中的任何一个单独解决都很容易,但将两者结合起来实际上很棘手。我有一个可能的解决方案,它有效,但缺点是您必须在模式定义中对“*”字符进行编码。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="PrintNames" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetDir>c:\temp\MyContent</TargetDir>
<InputFilesRelativeEsc>%2A%2A\%2A.bmp;%2A%2A\%2A.txt</InputFilesRelativeEsc>
</PropertyGroup>

<Target Name="PrintNames">
<ItemGroup>
<_TempGroup Include="$(InputFilesRelativeEsc)" />
</ItemGroup>

<CreateItem Include="@(_TempGroup->'$(TargetDir)\%(Identity)')">
<Output TaskParameter="Include" ItemName="_EvaluatedGroup" />
</CreateItem>
<Message Text="_EvaluatedGroup: %(_EvaluatedGroup.FullPath)" />

</Target>
</Project>

它的工作原理如下。属性 InputFilesRelativeEsc 是相关文件模式的列表。请注意通配符已编码(%2A 是星号的十六进制代码)。由于通配符已编码,当您将此模式包含 到该组时,组_TempGroup 不会尝试搜索和提取文件列表。现在_TempGroup 是一个由两个元素组成的组:**\*.bmp**\*.txt。现在你有了一个真正的团体,你可以改变它。唯一的问题是运行转换的正常 MSBuild 机制不会扩展通配符。您必须使用旧的 CreateItem 任务。 CreateItem 任务实际上已被 MSBuild 团队声明弃用,但它仍然有效。

关于c# - 将包含通配符的 MSBuild 属性展开到项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9055659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com