将自定义元数据从另一个 ItemGroup 添加到已定义的 ItemGroup

2023-11-22

我有以下内容:

<ItemGroup>
  <Files Include="C:\Versioning\**\file.version" />
<ItemGroup>

<ReadLinesFromFile File="%(Files.Identity)">
  <Output TaskParameter="Lines" ItemName="_Version"/>
</ReadLinesFromFile>

其中每个 file.version 文件只包含一行 - 你猜对了 - 表单的一个版本Major.Minor.Build.Revision.

我希望能够将每个项目关联起来FilesItemGroup 及其_Version通过将后者添加为元数据,以便我可以执行以下操作:

<Message Text="%(Files.Identity): %(Files.Version)" />

并让 MSBuild 打印出一份很好的文件版本关联列表。

这可能吗?


这可以通过使用目标批处理来添加您的Version元数据的成员。这涉及到移动你的ReadLinesFromFile操作到自己的目标,使用@(Files)ItemGroup 作为输入。

这会导致针对 ItemGroup 中的每个项目执行目标,从而允许您从每个单独的文件中读取内容(即版本号),然后更新该项目以添加Version元数据:

<Project DefaultTargets="OutputFilesAndVersions" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
      <Files Include="C:\Versioning\**\file.version" />
    </ItemGroup>
    <Target Name="OutputFilesAndVersions" DependsOnTargets="RetrieveVersions">
        <Message Text="@(Files->'%(Identity): %(Version)')" />
    </Target>
    <Target Name="RetrieveVersions" Inputs="@(Files)" Outputs="%(Files.Identity)">
        <ReadLinesFromFile File="%(Files.Identity)">
          <Output TaskParameter="Lines" PropertyName="_Version"/>
        </ReadLinesFromFile>
        <PropertyGroup>
            <MyFileName>%(Files.Identity)</MyFileName>
        </PropertyGroup>
        <ItemGroup>
            <Files Condition="'%(Files.Identity)'=='$(MyFileName)'">
                <Version>$(_Version)</Version>
            </Files>
        </ItemGroup>  
    </Target>
</Project>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将自定义元数据从另一个 ItemGroup 添加到已定义的 ItemGroup 的相关文章

随机推荐