gpt4 book ai didi

msbuild - 如何转储从 MSBuild 导入的属性表列表

转载 作者:行者123 更新时间:2023-12-05 05:28:44 26 4
gpt4 key购买 nike

我正在构建属性表的层次结构(许多属性表是根据平台和配置有条件地包括在内的)并且我正在尝试编写一组目标来帮助诊断可能潜入的任何错误。

我想要的是已包含的属性表列表。

例子:

<ImportGroup Condition="$(Configuration.Contains('Debug'))">
<Import Project="ps.cpp.config.debug.props"/>
</ImportGroup>
<ImportGroup Condition="$(Configuration.Contains('Release'))">
<Import Project="ps.cpp.config.release.props"/>
</ImportGroup>

<ImportGroup Condition="'$(Platform)' == 'x64'">
<Import Project="ps.cpp.plat.x64.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Platform)' == 'Win32'">
<Import Project="ps.cpp.plat.win32.props"/>
</ImportGroup>

像这样的目标:

<Target Name="DumpPropertySheets">
<!-- This doesn't work! -->
<!-- <Message Text="%(Import.Project)"/> -->
</Target>

当使用 msbuild test.vcxproj/t:DumpPropertySheets/p:Platform=x64/p:Configuration:Debug

构建时,应该会产生这样的控制台输出
DumpPropertySheets:
ps.cpp.config.debug.props
ps.cpp.plat.x64.props

最佳答案

没有明显的方法可以完成您想要做的事情。导入经过预处理以将所有内容聚合到一个文件中,它们不是像项目数组或属性这样的数据类型,以后可以引用。

语法 %(Import.Project) 不起作用,因为该语法仅对项数组有效,而您正试图在 Import 关键字上使用它,这不是填充项数组。

另请注意,围绕导入使用 ImportGroup 元素是可选的(并且可能有点冗长)。 MSBuild 文件中的以下两个构造是等效的...

<ImportGroup Condition="$(Configuration.Contains('Debug'))">
<Import Project="ps.cpp.config.debug.props"/>
</ImportGroup>

...和(为清楚起见换行)...

<Import
Condition="$(Configuration.Contains('Debug'))"
Project="ps.cpp.config.debug.props"
/>

如果您正在尝试诊断属性表导入错误,请不要忘记/pp 命令行开关,它将转储完整的预处理文件。您还可以(至少对于您自己的文件)为每个导入项数组提供一个唯一的条目,例如

<Import
Condition="$(Configuration.Contains('Debug'))"
Project="ps.cpp.config.debug.props"
/>

然后在 ps.cpp.config.debug.props 中,

<ItemGroup>
<_Import Include="$(MSBuildThisFile)" />
</ItemGroup>

然后在您的构建中,您可以在某种程度上获得您似乎正在寻找的东西,

<Target Name="DumpPropertySheets">
<!-- This does work! -->
<Message Text="%(_Import.Identity)" />
</Target>

关于msbuild - 如何转储从 MSBuild 导入的属性表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com