Я досить новачок у MS Build і переглядаю багато вбудованих цільових файлів, які постачаються з Visual Studio. Я бачив, як змінні проходили кілька різних шляхів, і я не зовсім впевнений у відмінностях між ними:
$(...)
@(...)
%(...)
Я досить новачок у MS Build і переглядаю багато вбудованих цільових файлів, які постачаються з Visual Studio. Я бачив, як змінні проходили кілька різних шляхів, і я не зовсім впевнений у відмінностях між ними:
$(...)
@(...)
%(...)
Відповіді:
$(...)
використовується для доступу до 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)"/>
Долар - $ (MyProp): Дозволяє посилатися на значення, вказані в PropertyGroups.
У Sign - @ (CodeFile): Дозволяє посилатися на списки елементів, зазначених у ItemGroups.
Відсоток -% (CodeFile.BatchNum): дозволяє посилатися на пакетні значення ItemGroup за допомогою метаданих. Це дещо складніше, тому неодмінно перегляньте документацію для отримання додаткової інформації.
Погляньте на кожне посилання, щоб отримати більш детальну інформацію про те, як вони використовуються. Удачі - сподіваюся, це допоможе!
Трохи розширення% (метадані елементів), є також відомі метадані елементів: 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>