Reputation: 4948
I'm rather new to MS Build and have been reviewing many of the built in target files that ship with Visual Studio. I have seen variables passed a few different ways and am not quite sure of the differences between these:
$(...)
@(...)
%(...)
Upvotes: 93
Views: 11243
Reputation: 3934
A bit of extension on the % (item metadata), there is also the Well-known item metadata: https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-well-known-item-metadata?view=vs-2017
E.g. ModifiedTime:
<ItemGroup>
<IntermediateAssembly Include="$(IntermediateOutputPath)$(TargetName)$(TargetExt)"/>
</ItemGroup>
<PropertyGroup>
<_AssemblyTimestampBeforeCompile>%(IntermediateAssembly.ModifiedTime)</_AssemblyTimestampBeforeCompile>
</PropertyGroup>
Upvotes: 0
Reputation: 50000
$(...)
is used to access Property
value (More info on Property element)
<PropertyGroup>
<Configuration>Debug</Configuration>
</PropertyGroup>
<Message Text="Configuration = $(Configuration)"/>
@(...)
is used to access Item
value (More info on Item element)
<ItemGroup>
<Reference Include="System.Data"/>
<Reference Include="System.Web.*"/>
</ItemGroup>
<Message Text="References = @(Reference)"/>
%(...)
is used to acces Item Metadata
value (More info on Item Metadata). It's also used to do batching.
<ItemGroup>
<Compile Include="Account\ChangePassword.aspx.cs">
<DependentUpon>ChangePassword.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
<Compile/>
</ItemGroup>
<Message Text="Element @(Compile) of subtype %(SubType) and depend of %(DependentUpon)"/>
Upvotes: 117
Reputation: 728
Dollar - $(MyProp): Allows you to reference values specified within PropertyGroups.
At Sign - @(CodeFile): Allows you to reference lists of items specified within ItemGroups.
Percent - %(CodeFile.BatchNum): Allows you to reference batched ItemGroup values using metadata. This is a bit more complicated, so definitely review the documentation for more info.
Take a look at each link for more detailed info on how these are used. Good luck -- hope this helps!
Upvotes: 24