Різні способи передачі змінних у MSBuild


78

Я досить новачок у MS Build і переглядаю багато вбудованих цільових файлів, які постачаються з Visual Studio. Я бачив, як змінні проходили кілька різних шляхів, і я не зовсім впевнений у відмінностях між ними:

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

Відповіді:


96
  • $(...)використовується для доступу до Propertyзначення (Докладніше про елемент Властивість )

    <PropertyGroup>
      <Configuration>Debug</Configuration>
    </PropertyGroup>
    
    <Message Text="Configuration = $(Configuration)"/>
    
  • @(...)використовується для доступу до Itemзначення (Докладніше про елемент Item )

    <ItemGroup>
      <Reference Include="System.Data"/>
      <Reference Include="System.Web.*"/>
    </ItemGroup>
    
    <Message Text="References = @(Reference)"/>
    
  • %(...)використовується для доступу до Item Metadataзначення (Докладніше про метадані елементів ). Він також використовується для дозування .

    <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)"/>
    

19

Долар - $ (MyProp): Дозволяє посилатися на значення, вказані в PropertyGroups.

У Sign - @ (CodeFile): Дозволяє посилатися на списки елементів, зазначених у ItemGroups.

Відсоток -% (CodeFile.BatchNum): дозволяє посилатися на пакетні значення ItemGroup за допомогою метаданих. Це дещо складніше, тому неодмінно перегляньте документацію для отримання додаткової інформації.

Погляньте на кожне посилання, щоб отримати більш детальну інформацію про те, як вони використовуються. Удачі - сподіваюся, це допоможе!


0

Трохи розширення% (метадані елементів), є також відомі метадані елементів: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-well-known-item-metadata? view = проти-2017

Наприклад, ModifiedTime:

  <ItemGroup>
    <IntermediateAssembly Include="$(IntermediateOutputPath)$(TargetName)$(TargetExt)"/>
  </ItemGroup>

<PropertyGroup>
  <_AssemblyTimestampBeforeCompile>%(IntermediateAssembly.ModifiedTime)</_AssemblyTimestampBeforeCompile>
</PropertyGroup>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.