MSBuildのPropertyGroup、ItemGroup、ItemMetadata

8536 ワード

ソフトウェアプロジェクトの継続的な進展の中で、MSBuildスクリプトは数ヶ月も変更されない可能性があります.通常、コンパイルとパブリッシュのディレクトリは常に変化しないからです.
しかし、ある日修正する必要があると、その$(Something)、@(Something)、%(Something)がかなり頭が大きいのを見て、MSDNを検索しなければ合理的な使い方を見つけることができません.
次のような文法を見るたびに、文法をこのように設計する必要があると感じますか?
1 <Copy SourceFiles="@(SrcFiles)" DestinationFiles="@(SrcFiles->'c:\DestDir\%(RecursiveDir)%(Filename)%(Extension)')" />

この文章では、PropertyGroup、ItemGroup、ItemMetadataについて簡単な文法を紹介し、未来の自分を救う.
PropertyGroupと$記号
PropertyGroupは、1つ以上の変数値をマークするために使用されます.ProperyGroup内のXMLノードプロパティ(Property)は、任意の文字列で名前を付けることができます.
属性は、$(OtherPropertyName)構文で他の属性の値を参照できます.同様に、プロパティ値は他の場所で同じ方法で参照されます.
1 <PropertyGroup>
2   <BaseFolder>C:\my\folderBaseFolder>
3   <SettingsFile>$(BaseFolder)\settings\app.xmlSettingsFile>
4 PropertyGroup>
5 <Message Text="Using settings file found at $(SettingsFile)"/>

上のMessageコマンドの出力結果は次のとおりです.
1 Using settings file found at C:\my\folder\settings\app.xml

ItemGroupと@記号
ItemGroupは、C#のArrayやDictionaryなどのような複数の値を含む変数をマークするために使用されます.
1 <ItemGroup>
2   <MyItems Include="First" />
3   <MyItems Include="Second;Third;" />
4   <MyItems Include=";;;;Fourth;;" />
5 ItemGroup>
6 <Message Text="My items using dollar: $(MyItems)"/>
7 <Message Text="My items using at symbol: @(MyItems)"/>

上のコマンドの結果は次のとおりです.
1 My items using dollar:
2 My items using at symbol: First;Second;Third;Fourth

$記号を使用すると、空の文字列しか得られません.@記号を使用すると「;」と出力されます.セミコロンで区切られた文字列.
同時に、MSBuildも私たちに余分な「;」を濾過してくれた.文字.
ItemMetadataと%記号
ItemGroupはリストデータだけでなくkey/value辞書にも使用できます.
MSBuildではkey/valueをItemMetadataと呼ぶ.
 1 <ItemGroup>
 2   <People Include="Joe">
 3     <Email>[email protected]Email>
 4   People>
 5   <People Include="Bill">
 6     <Email>[email protected]Email>
 7   People>
 8   <People Include="Oscar">
 9     <Email>[email protected]Email>
10   People>
11 ItemGroup>
12 <Message Text="Processing person %(People.Identity) with email %(People.Email)"/>

上のコマンドの結果は次のとおりです.
1 Processing person Joe with email [email protected]
2 Processing person Bill with email [email protected]
3 Processing person Oscar with email [email protected]

%(ItemGroup.MetadataKey)構文では、「Identity」はXMLノードの「Include」属性の値を表します.
また,Messageコマンドは1つしか書かれていないが,3つの出力があることが分かった.利用しているMSBuildのTask Batching機能です.
他に何かあるの?ここを参照:MSBuild Well-known Item Metadata
参考資料
  • MSBuild Overview
  • MSBuild Batching
  • MSBuild Items
  • MSBuild Tasks
  • MSBuild Targets
  • MSBuild Well-known Item Metadata
  • Item Metadata in Task Batching
  • Microsoft.Build.Tasks Namespace
  • TaskExtension Class
  • How to: Specify Which Target to Build First

  •  
    転載先:https://www.cnblogs.com/gaochundong/p/msbuild_propertygroup_itemgroup_itemmetadata.html