Различные способы передачи переменных в MSBuild - PullRequest
65 голосов
/ 12 мая 2010

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

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

Ответы [ 3 ]

82 голосов
/ 12 мая 2010
  • $(...) используется для доступа к значению Property (Подробнее о Элемент свойства )

    <PropertyGroup>
      <Configuration>Debug</Configuration>
    </PropertyGroup>
    
    <Message Text="Configuration = $(Configuration)"/>
    
  • @(...) используется для доступа к значению 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)"/>
    
16 голосов
/ 12 мая 2010

Доллар - $ (MyProp): Позволяет ссылаться на значения, указанные в PropertyGroups.

At Sign - @ (CodeFile): Позволяет ссылаться на списки элементов, указанных в ItemGroups.

Процент -% (CodeFile.BatchNum): Позволяет ссылаться на пакетные значения ItemGroup с использованием метаданных. Это немного сложнее, поэтому обязательно ознакомьтесь с документацией для получения дополнительной информации.

Посмотрите на каждую ссылку для более подробной информации о том, как они используются. Удачи - надеюсь, это поможет!

0 голосов
/ 19 ноября 2018

Немного расширения в% (метаданные элемента), есть также хорошо известные метаданные элемента: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-well-known-item-metadata?view=vs-2017

например. ModifiedTime:

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

<PropertyGroup>
  <_AssemblyTimestampBeforeCompile>%(IntermediateAssembly.ModifiedTime)</_AssemblyTimestampBeforeCompile>
</PropertyGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...