开发者

Different ways to pass variables in MSBuild

I'm rather new to MS Build and have been reviewing many of the built in target fi开发者_运维问答les that ship with Visual Studio. I have seen variables passed a few different ways and am not quite sure of the differences between these:

$(...)
@(...)
%(...)


  • $(...)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)"/>
    


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!


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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜