特定のアイテムに関連付けられたすべてのメタデータキーを取得する方法はありますか?ItemGroupアイテムのすべてのメタデータキーを取得する方法は?
私は以下のようにしたいと思います。
を考える:
<ItemGroup>
<MyItems Include="item1">
<key1>val1</key1>
<key2>val2</key2>
<key3>val3</key3>
</MyItems>
<MyItems Include="item2">
<key4>val4</key4>
</MyItems>
</ItemGroup>
はITEM1がKEY1、KEY2、およびKEY3のために利用可能なメタデータを持っていることを決定することができる、とITEM2ことをこれらのキーの名前が実際にあるか知らなくても、KEY4のために使用可能なメタデータを持っています。
実際、メタデータを使用して、わからない属性を指定し、次にどの属性が指定されているかを確認する方法を見つけようとしています。
他の言い方をすれば、各アイテムのメタデータはキー/値ペアを含むハッシュだけであり、すべてのキーが何であるか把握しようとしていると思います。
誰でもmsbuildでこれを行う方法を知っていますか?上記はまた、MSBuildのは自動的にすべての項目を追加し、すべてのデフォルトのメタデータが含まれることを
<UsingTask
TaskName="GetMetadataTask"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
<ParameterGroup>
<MyItemGroup ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<MetadataString Output="true" />
</ParameterGroup>
<Task>
<Using Namespace="System"/>
<Code Type="Fragment" Language="cs">
<![CDATA[
StringBuilder command = new StringBuilder();
foreach (ITaskItem item in MyItemGroup)
{
command.AppendFormat("ItemName={0}\r\n", item);
foreach (string parameter in item.MetadataNames)
{
command.AppendFormat(" {0}={1}\r\n", parameter, item.GetMetadata(parameter));
}
command.AppendFormat("\r\n");
}
MetadataString = command.ToString();
]]>
</Code>
</Task>
</UsingTask>
注:私は次のようなカスタムインラインタスクを使用して、これを解決することになった
おかげ
私が知る限り、MSBuildのアイテムのメタデータをリストするオプションはありませんが、反映されたメタデータを反復処理してリストするカスタムBuildTaskを記述することができます。 – MikeR
うん、それは私が終わった道だった –