VC PlusPlus:MSBuild Distinct
概要
Distinctはアイテムグループの中に記述できる特別なキーワードのひとつです。アイテムの重複している部分を一つにまとめます。アイテムがいろいろなファイルを差していて、最低限必要なディレクトリ名を唯一に絞っていくような処理によく使われます。
<Project ...>
<ItemGroup>
<Text Include="doc\a.en.txt">
<LinkCompiled>True</LinkCompiled>
</Text>
<Text Include="doc\a.ja.txt">
<LinkCompiled>False</LinkCompiled>
</Text>
</ItemGroup>
<Target Name="MessageText" AfterTargets="Build">
<Message Text="@ (Text) = {@(Text->'%(Identity)'->DirectoryName()->Distinct())}" />
</Target>
</Project>
出力結果
@ (Text) = {C:\Users\(UserID)\source\repos\(ProjectName)\doc}
アイテムに対するファイルが存在するとき、その絶対パスを取得できます。バッチになっている場合はセミコロンで接続されて表示されます。