我对MS Build还是比较陌生,并且一直在审查Visual Studio附带的许多内置目标文件。我已经看到变量通过几种不同的方式传递,并且不确定它们之间的区别:
$(...)
@(...)
%(...)
我对MS Build还是比较陌生,并且一直在审查Visual Studio附带的许多内置目标文件。我已经看到变量通过几种不同的方式传递,并且不确定它们之间的区别:
$(...)
@(...)
%(...)
Answers:
$(...)
用于访问Property
值(有关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)"/>
Dollar-$(MyProp):允许您引用PropertyGroups中指定的值。
在符号处-@(CodeFile):允许您引用ItemGroups中指定的项目列表。
百分比-%(CodeFile.BatchNum):允许您使用元数据引用批处理的ItemGroup值。这有点复杂,所以一定要查阅文档以获取更多信息。
请查看每个链接,以获取有关如何使用它们的更多详细信息。祝你好运,希望这会有帮助!
在%(项目元数据)上有一些扩展,还有众所周知的项目元数据:https : //docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-well-known-item-metadata? view = vs-2017
例如ModifiedTime:
<ItemGroup>
<IntermediateAssembly Include="$(IntermediateOutputPath)$(TargetName)$(TargetExt)"/>
</ItemGroup>
<PropertyGroup>
<_AssemblyTimestampBeforeCompile>%(IntermediateAssembly.ModifiedTime)</_AssemblyTimestampBeforeCompile>
</PropertyGroup>