gpt4 book ai didi

msbuild - 具有有关文件的自定义元数据的ItemGroup

转载 作者:行者123 更新时间:2023-12-04 03:47:02 26 4
gpt4 key购买 nike

我正在尝试创建一个名为“Targets”的元数据属性的"file"任务项组,其中填充了文件的相对路径。

例子:
对于这些路径:

D:\Test\Blah.exe
D:\Test\Config\fun.config
D:\Test\en-US\my.resources.dll



输出应为:

File Target = Blah.exe
File Target = Config\fun.config
File Target = en-US\my.resources.dll



这是我的最佳尝试...希望这可以使我的问题更清楚:
<ItemGroup>
<Files Include="d:\test\**\*" >
<TargetPath>%(RecursiveDir)%(Filename)%(Extension)</TargetPath>
</Files>
</ItemGroup>

<Message Text="File Target = @(Files->'%(TargetPath)')"/>

我想正确填充“TargetPath” ...当前它似乎为null或为空。有人知道我想念什么吗?

编辑:

是的,我知道我可以做到这一点:
<Message Text="File Target = @(Files->'%(RecursiveDir)%(Filename)%(Extension)')"/>

但是,我正在建立此ItemGroup以使用ResolveManifestFiles MSBuild任务,该任务要求我建立一个具有TargetPath元数据属性的TaskItem才能自定义该值。

最佳答案

您正在尝试将动态元数据分配给项目组,然后再对其进行创建。在您的示例中,无需创建自定义元数据,因为此信息已经是众所周知的元数据的一部分,因此您可以执行以下操作:

<ItemGroup>
<Files Include="d:\test\**\*" ></Files>
</ItemGroup>

<Message Text="File Target = @(Files->'%(RecursiveDir)%(Filename)%(Extension)')"/>

或者:
<Message Text="File Target = %(Files.RecursiveDir)%(Files.Filename)%(Files.Extension)"/>

编辑:

本示例使用 CreateItem任务动态更新项目组:
<ItemGroup>
<Files Include="d:\test\**\*" ></Files>
</ItemGroup>

<CreateItem
Include="@(Files)"
AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(Extension)">
<Output TaskParameter="Include" ItemName="Files"/>
</CreateItem>

关于msbuild - 具有有关文件的自定义元数据的ItemGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010655/

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