我有以下内容:
<ItemGroup>
<Files Include="C:\Versioning\**\file.version" />
<ItemGroup>
<ReadLinesFromFile File="%(Files.Identity)">
<Output TaskParameter="Lines" ItemName="_Version"/>
</ReadLinesFromFile>
Run Code Online (Sandbox Code Playgroud)
其中每个file.version文件只包含一行 - 您猜对了 - 该表单的一个版本Major.Minor.Build.Revision.
我希望能够将FilesItemGroup 中的每个项目与其关联,方法_Version是将后者添加为元数据,以便我可以执行以下操作:
<Message Text="%(Files.Identity): %(Files.Version)" />
Run Code Online (Sandbox Code Playgroud)
并让MSBuild打印出一个很好的文件版本关联列表.
这可能吗?
Version这可以通过使用目标批处理将您的成员添加到元数据来实现。这涉及使用ItemGroup 作为输入将您的ReadLinesFromFile操作移动到其自己的目标。@(Files)
这会导致针对 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2620 次 |
| 最近记录: |