Different ways to pass variables in MSBuild
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:
$(...)
@(...)
%(...)
Solution 1:
-
$(...)
is used to accessProperty
value (More info on Property element)<PropertyGroup> <Configuration>Debug</Configuration> </PropertyGroup> <Message Text="Configuration = $(Configuration)"/>
-
@(...)
is used to accessItem
value (More info on Item element)<ItemGroup> <Reference Include="System.Data"/> <Reference Include="System.Web.*"/> </ItemGroup> <Message Text="References = @(Reference)"/>
-
%(...)
is used to accesItem 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)"/>
Solution 2:
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!