デフォルトのMSBuildテクノロジを使用して、msbuildのプロパティとしてアイテムグループ内のリストにアクセスすることは可能ですか?これはC#のカスタムタスクで実行できることはわかっていますが、可能であれば組み込み機能を使用しようとしています。
例:
私はアイテムグループを持っています:
<ItemGroup>
<SolutionToBuild Include="$(SolutionRoot)\Solutions\ClassLib\ClassLib.sln">
<Properties>
AssemblySigningKey=MySigningKey;
OutDir=$(BinariesRoot)\SomeLocation\;
LibraryName=ClassLib;
PlatformTarget=x86;
</Properties>
</SolutionToBuild>
<SolutionToBuild Include="$(SolutionRoot)\Solutions\BLAH\BLAH.sln">
<Properties>
ProjectType=Web;
</Properties>
</SolutionToBuild>
</ItemGroup>
AssemblySigningKey
の値が存在する場合はそれを抽出し、この値をMSBuild変数に配置したいと思います。
私はいくつかの方法を試しましたが、私が見つけた最も近い例は、別のターゲット内で変換を使用することですが、これでも少しハックのように見えますが、Condition
動作させることができたとしても、解析する必要がありますの値の分割=
。アイテムグループ内でこのメタデータにアクセスするための標準的な方法はありませんか?
<Target Name="TransformProps"
Inputs="%(SolutionToBuild.Identity)"
Outputs="_Non_Existent_Item_To_Batch_">
<PropertyGroup>
<IncludeProps>%(SolutionToBuild.Properties)</IncludeProps>
</PropertyGroup>
<ItemGroup>
<IncludeProps Include="$(IncludeProps)" />
<Solution Include="@(SolutionToBuild)">
<IncludeProps Condition="'True'=='True' ">@(IncludeProps ->'-PROP %(Identity)', ' ')</IncludeProps>
</Solution>
</ItemGroup>
</Target>
私の主なターゲットは、次の方法でトランスフォームを呼び出します。
<Target Name="Main" DependsOnTargets="TransformProps">
<Message Text="Solution info: %(Solution.Identity) %(Solution.IncludeProps)" />
</Target>